【问题标题】:Boost.log - Get current file name when using file rotationBoost.log - 使用文件轮换时获取当前文件名
【发布时间】:2021-04-12 13:04:29
【问题描述】:

我知道这个问题可能是重复的,但我想知道当有文件名轮换的文件后端时是否仍然无法获取当前日志文件名?!

提前致谢。

编辑:

对于文件名轮换,我的意思类似于以下内容,当日志文件轮换时文件名会发生变化:

auto fileSink = logging::add_file_log(
    keywords::file_name = "..\\Logs\\%Y%m%d_Tracing_%H%M%S.log",
    keywords::rotation_size = 2 * 1024 * 1024,
    keywords::min_free_space = 15 * 1024 * 1024,
    keywords::open_mode = std::ios_base::app);

【问题讨论】:

  • 它是后端的一个属性。如果您使用来自实用程序/setup/file.hpp 的add_file_log,那么您永远看不到后端。相反,您只需获得sink,这可能是您 80% 的时间所需要的。我查看了aux::add_file_log implementation,但它看起来很像被支持的人是故意没有记录的

标签: c++ boost boost-log


【解决方案1】:

正如sehe 提到的:

这是后端的属性。

因此我设法将接收器初始化与相应的后端分开:

typedef sinks::synchronous_sink<sinks::text_file_backend> fileSink;
boost::shared_ptr<fileSink> fileSinkSink;
fileSinkSink = logging::add_file_log(
    keywords::file_name = "..\\Logs\\%Y%m%d_Tracing_%H%M%S.log",
    keywords::rotation_size = 2* 1024 * 1024,
    keywords::min_free_space = 15 * 1024 * 1024,
    keywords::open_mode = std::ios_base::app);

现在我发现我可以访问后端,从而访问当前文件名:

char currentFileName[200] = "";
strcpy(currentFileName, fileSinkSink->locked_backend().get()->get_current_file_name().string().c_str());

感谢您的提示!它解决了我的问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2011-08-18
    • 1970-01-01
    • 2013-10-31
    • 2011-05-12
    • 1970-01-01
    • 2010-10-26
    相关资源
    最近更新 更多