如何设置boost.log以限制日志文件的数量

Mur*_*gon 5 c++ logging boost

我正在尝试使用Boost.Log(v1.55.0)设置日志记录,我似乎无法找到在后端设置文件收集器的方法,因此它只会维护最后20个日志.

namespace sinks     = boost::log::sinks;
namespace keywords  = boost::log::keywords;

typedef sinks::text_file_backend            TextFileBackend;
typedef boost::shared_ptr<TextFileBackend>  TextFileBackendPtr;

TextFileBackendPtr pBackend =
  boost::make_shared<TextFileBackend>
  (
    keywords::file_name = "BoostLogTest_%Y%m%d.log",                            
    keywords::auto_flush = true
  );

// Set up where the rotated files will be stored
pBackend->set_file_collector
(
  sinks::file::make_collector
  (
    keywords::target = "..\\Logs"
  )
);
Run Code Online (Sandbox Code Playgroud)

在对sinks :: file :: make_collector的调用中,我发现了许多像max_size和min_free_space这样的关键字,但这两个关键字都不是我想要的.我只想要像max_files这样的东西,所以我可以告诉它只保留最后20个日志,无论它们占用多少磁盘空间.我可以找到这样的唯一参考是打开的这张票:https://svn.boost.org/trac/boost/ticket/8746.

似乎也没有可用的关键字列表.我发现的所有内容都来自网上的例子.

won*_*nce 6

make_collector来自text_file_backend.hpp的文档:

支持以下命名参数:

  • target - 指定要存储的文件的目标目录.此参数是必需的.
  • max_size - 指定收集器尝试不超过的存储文件的最大总大小(以字节为单位).如果大小超过此阈值,则删除最旧的文件以释放空间.请注意,如果单个文件的大小超过\ c max_size值,则可能会超出阈值.如果未指定,则不保持阈值.
  • min_free_space - 指定收集器尝试维护的目标目录中的最小可用空间(以字节为单位).如果超过阈值,则删除最旧的文件以释放空间.如果未指定,则不保持阈值.

因此,boost :: log目前不支持根据其编号收集旧的日志文件.


cbu*_*art 5

从版本 1.61 开始,可以使用max_files参数:http://www.boost.org/doc/libs/1_61_0/libs/log/doc/html/log/detailed/sink_backends.html

void init_file_collecting(boost::shared_ptr< file_sink > sink)
{
    sink->locked_backend()->set_file_collector(sinks::file::make_collector(
        keywords::target = "logs",
        keywords::max_size = 16 * 1024 * 1024,
        keywords::min_free_space = 100 * 1024 * 1024,
        keywords::max_files = 512
    ));
}
Run Code Online (Sandbox Code Playgroud)