gpt4 book ai didi

c++ - Boost.Log - 如何使用附加和旋转配置 text_file_backend

转载 作者:行者123 更新时间:2023-11-28 04:44:26 24 4
gpt4 key购买 nike

如何创建附加到现有文件但也有旋转的 text_file_backend?我这样做了,但每次运行我的程序时都会创建一个新文件。

  1. App.log
  2. App.log00000
  3. App.log00001
  4. 等等....

    boost::log::add_file_log
    (
    boost::log::keywords::auto_flush = true,
    boost::log::keywords::target = "Log",
    boost::log::keywords::file_name = "App.log", // file name pattern eg: keywords::file_name = "app%m%d%Y_%H%M%S_%5N.log",
    boost::log::keywords::open_mode = std::ios::out | std::ios::app, // append mode
    boost::log::keywords::rotation_size = 10 * 1024 * 1024, // rotate files every 10 MBytes
    boost::log::keywords::time_based_rotation = boost::log::sinks::file::rotation_at_time_point(0, 0, 0), // ...or at midnight
    .....

还有什么我可以尝试的吗?

谢谢

最佳答案

使用 target 参数,您将目标目录配置为不同于最初写入日志文件的目录(file_name 参数),这意味着轮换文件将被移动。由于文件名不包含可以区分文件的占位符,因此新文件与之前轮换留在目标目录中的文件发生冲突,并附加了一个计数器后缀以避免冲突。

仅当接收器后端打开由 file_name 标识的文件并且该文件已经存在时,附加才有效。它不会在旋转时将文件附加到目标目录中的现有文件,这是不可能的。由于在您的情况下,旋转每次都会将文件移走,因此永远不会发生追加。

为了使追加和旋转都能正常工作,您必须确保 (a) 接收器后端写入的先前文件保留在同一目录中,并且与新接收器尝试打开的文件同名,并且 (b)文件名包含一些占位符,以便在每次旋转时生成一个新文件名。这些是相互矛盾的要求,但某些配置可以满足它们。例如,您可以将目标目录配置为与后端写入日志文件的位置相同,文件名包含日期并在每天午夜轮换。

boost::log::add_file_log
(
boost::log::keywords::auto_flush = true,
boost::log::keywords::target = "Log",
boost::log::keywords::file_name = "Log/App_%Y%m%d.log",
boost::log::keywords::open_mode = std::ios::out | std::ios::app,
boost::log::keywords::time_based_rotation = boost::log::sinks::file::rotation_at_time_point(0, 0, 0)
);

请注意,文件计数器和文件大小轮换不适用于附加,因为它们往往会违反我列出的要求之一。

关于c++ - Boost.Log - 如何使用附加和旋转配置 text_file_backend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49558240/

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