Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何设置boost.log以限制日志文件的数量_C++_Logging_Boost - Fatal编程技术网

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

C++ 如何设置boost.log以限制日志文件的数量,c++,logging,boost,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<TextFil

我正在尝试使用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"
  )
);
namespace sinks=boost::log::sinks;
名称空间关键字=boost::log::关键字;
typedef sinks::text_file_backend TextFileBackend;
typedef boost::shared_ptr TextFileBackendPtr;
TextFileBackendPtr pBackend=
boost::使_共享
(
关键词::file\u name=“BoostLogTest\uy%m%d.log”,
关键词::自动刷新=真
);
//设置旋转文件的存储位置
pBackend->set\u file\u收集器
(
接收器::文件::生成收集器
(
关键词::target=“..\\Logs”
)
);
在对sinks::file::make_collector的调用中,我找到了许多关键字,如max_size和min_free_space,但这两个关键字都不是我想要的。我只想要像max_文件这样的东西,这样我就可以告诉它只保留最后20个日志,不管它们占用了多少磁盘空间。我能找到的唯一参考资料是这张打开的票:


似乎也没有可供使用的关键字列表。我找到的所有示例都来自网络上的示例。

来自
make\u collector
,取自text\u file\u backend.hpp:

支持以下命名参数:

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

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

可以从版本1.61开始,使用
max\u files
参数:

void init_file_收集(boost::shared_ptrsink)
{
接收器->锁定的\u后端()->设置\u文件\u收集器(接收器::文件::制作\u收集器(
关键词::target=“日志”,
关键词::max_size=16*1024*1024,
关键词::最小可用空间=100*1024*1024,
关键词::max_files=512
));
}

我也在找同样的。你找到解决办法了吗?@zuko不,我找不到任何解决办法。这可能是他们以后会添加的内容。我最终没有使用boost来记录日志。
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
    ));
}