我最近在我的C ++应用程序中采用了Easylogging++,并且遇到了我希望只是文档遗漏的内容。
我希望每次启动应用程序时都清除我的日志文件,而不是从以前的应用程序实例添加日志事件。我意识到我可以在任何记录事件之前在启动时删除日志文件,但这看起来像是一个黑客。
任何帮助将不胜感激。感谢。
答案 0 :(得分:4)
从版本v9.84开始,可以通过定义configuration macro来配置它。
您需要在#define ELPP_FRESH_LOG_FILE
#include "easylogging++"
您很可能不想对每个包含都这样做。作者建议使用编译器标志。或者,您可以创建包装器标头。
答案 1 :(得分:3)
如果不采用编辑easylogging ++,我无法找到解决这个问题的方法。显然,我希望这不是必要的,但我很确定从v9.77开始,在应用程序启动时没有用于重置日志文件的内置工具。无论如何,如果我错了,请纠正我。
检查代码,我发现日志文件总是以追加模式创建。似乎没有任何明确删除日志文件的逻辑。
对于任何对我的黑客工作感兴趣的人,我更改了传递到utils :: File :: newFileStream()中的fstream构造函数的开放模式参数,以包含fstream :: trunc而不是fstream :: app。更改发生在easylogging ++。h,v9.77的第1084行附近。
以下是我所指的代码部分:
namespace utils {
class File : base::StaticClass {
public:
/// @brief Creates new out file stream for specified filename.
/// @return Pointer to newly created fstream or nullptr
static base::type::fstream_t* newFileStream(const std::string& filename) {
// CLW: Dec 29, 2014:
// I don't want a log file containing log events from past application instances,
// but there seems to be no built-in way to reset the log file when the app is started
// So, I'm changing the open mode in the following fstream constructor call to include
// fstream::trunc instead of fstream::app.
base::type::fstream_t *fs = new base::type::fstream_t(filename.c_str(),
base::type::fstream_t::out | base::type::fstream_t::trunc);
// base::type::fstream_t *fs = new base::type::fstream_t(filename.c_str(),
// base::type::fstream_t::out | base::type::fstream_t::app);
抱歉讨厌的代码格式化。我只是按照当前在easylogging ++。h中格式化的方式复制代码,以便可以轻松识别。