gpt4 book ai didi

c++ - boost 日志 - 处理断电场景

转载 作者:行者123 更新时间:2023-11-28 05:16:13 25 4
gpt4 key购买 nike

我已经使用 boost 1.63 实现了一个全局记录器。这是初始化:

BOOST_LOG_GLOBAL_LOGGER_INIT(my_logger, src::severity_logger_mt< severity_level >)
{
typedef sinks::synchronous_sink< sinks::text_file_backend > file_sink;
boost::shared_ptr< file_sink > sink(new file_sink(
keywords::file_name = "/var/log/testApp/%Y%m%d_%H%M%S_testApp.log",
keywords::rotation_size = 5 * 1024 * 1024,
keywords::auto_flush = true));

sink->locked_backend()->set_file_collector(sinks::file::make_collector(
keywords::target = "/var/log/testApp/oldLogs",
keywords::max_size = 5 * 1024 * 1024 * 2,
keywords::min_free_space = 5 * 1024 * 1024 * 2,
keywords::max_files = 2));

sink->locked_backend()->scan_for_files();

sink->set_formatter(
expr::format("[%1%]<%2%> : %3%") %
expr::attr< boost::posix_time::ptime >("TimeStamp") %
expr::attr< severity_level >("Severity") %
expr::smessage);

logging::core::get()->add_sink(sink);
logging::core::get()->add_global_attribute("TimeStamp", attrs::local_clock());

src::severity_logger_mt< severity_level > slg;
return slg;
}

当程序意外结束时(例如 sudo kill -9 pid 或 power off),日志文件不会移动到 oldLogs 目录(当程序再次运行时也是如此)并且/var/log/testApp 目录可能包含许多日志文件。

是否可以处理这种情况?

最佳答案

Is it possible to handle such scenario ?

仅适用于离线方式。例如,您可以在下次启动时自动运行脚本,将写入一半的日志文件移动到目标目录。或者您可以在下次应用程序启动时执行此操作。在这种情况下,如果您以附加模式打开日志文件(即通过将 keywords::open_mode = std::ios::app 命名参数传递给接收器构造函数),Boost.Log 可以为您提供帮助,然后立即在接收器后端调用 rotate_file。这样,非空日志文件将在您的应用程序启动时轮换,尽管您将无法实际附加到日志文件。

更新:

我注意到您在日志文件名中使用了时间戳。在这种情况下,使用 Boost.Log 旋转日志文件的方法将不起作用,因为下次您的应用程序启动时,该库可能会打开一个不同名称的文件。如果时间戳必不可少,那么剩下的唯一选择就是脚本。

关于c++ - boost 日志 - 处理断电场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42583030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com