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

时间:2014-01-22 16:07:39

标签: 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"
  )
);

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

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

2 个答案:

答案 0 :(得分:5)

来自 text_file_backend.hpp make_collector文档:

  

支持以下命名参数:

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

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

答案 1 :(得分:2)

可以从版本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
    ));
}
相关问题