Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging 易登录&x2B+;:在应用程序启动时清除日志文件 我最近在C++应用程序中采用了,我希望我的文档中有一些东西被忽略了。_Logging_Reset_App Startup_Easylogging++ - Fatal编程技术网

Logging 易登录&x2B+;:在应用程序启动时清除日志文件 我最近在C++应用程序中采用了,我希望我的文档中有一些东西被忽略了。

Logging 易登录&x2B+;:在应用程序启动时清除日志文件 我最近在C++应用程序中采用了,我希望我的文档中有一些东西被忽略了。,logging,reset,app-startup,easylogging++,Logging,Reset,App Startup,Easylogging++,我希望每次启动应用程序时都清除日志文件,而不是附加以前应用程序实例中的日志事件。我意识到我可以在任何日志记录事件之前在启动时删除日志文件,但这似乎是一种黑客行为 任何帮助都将不胜感激。谢谢。如果不借助编辑EasyLogg++.h,我就无法找到这个问题的解决方案。显然,我希望这不是必需的,但我很确定,从v9.77开始,没有内置的工具可以在应用程序启动时重置日志文件。无论如何,如果我错了,请纠正我 检查代码时,我发现日志文件总是以追加模式创建的。似乎没有任何进一步的逻辑明确删除日志文件 对于任何对我

我希望每次启动应用程序时都清除日志文件,而不是附加以前应用程序实例中的日志事件。我意识到我可以在任何日志记录事件之前在启动时删除日志文件,但这似乎是一种黑客行为


任何帮助都将不胜感激。谢谢。

如果不借助编辑EasyLogg++.h,我就无法找到这个问题的解决方案。显然,我希望这不是必需的,但我很确定,从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中当前的格式复制了代码,以便可以轻松识别。

从v9.84版开始,可以通过定义

您需要在
之前添加
#定义ELPP_FRESH_LOG_文件
#包括“easylogging++”


很可能您不想对每个包含都这样做。作者建议使用编译器标志。或者,您可以创建一个包装头

刚刚下载了easylogging++_v9.84.zip。打开easylogging++.h并注意到文件顶部的这一行:://easylogging++v9.83I确认easylogging++.h中的代码实际上正在处理ELPP_FRESH_LOG_文件编译器def(它可以工作)。美好的因此,这似乎只是一个不更新注释以反映正确版本号的情况。