我正在尝试使用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。
似乎还没有可用的关键字列表。我发现的所有内容都来自网上的例子。
答案 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
));
}