我最近在我的C++应用程序中采用了Easylogging++,并且遇到了我希望只是在他们的文档中遗漏的东西。
我希望每次启动应用程序时清除我的日志文件,而不是附加以前应用程序实例中的日志事件。我意识到我可以在任何日志记录事件之前删除启动时的日志文件,但这似乎是一个黑客行为。
任何帮助都将不胜感激。谢谢。
发布于 2016-08-30 05:43:33
从v9.84版本开始,可以通过定义configuration macro来配置它。
您需要在#include "easylogging++"之前添加#define ELPP_FRESH_LOG_FILE
最有可能的情况是,您不希望对每个include执行此操作。作者建议使用编译器标志。或者,您可以创建包装器标头。
发布于 2015-01-02 06:47:45
如果不借助编辑easylogging++.h,我无法找到解决此问题的方法。显然,我希望这不是必须的,但我非常确定,从v9.77开始,没有内置的工具可以在应用程序启动时重置日志文件。如果我错了,请务必纠正我。
检查代码时,我发现日志文件总是以追加模式创建的。似乎没有任何进一步的逻辑来显式删除日志文件。
对于对我的hack工作感兴趣的任何人,我将传递给utils::File::newFileStream()中的fstream构造函数的open模式参数更改为包含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中格式化的代码,以便它可以很容易地识别。
https://stackoverflow.com/questions/27194754
复制相似问题