Boost::日志和日志编号

Boost::Log and log numbering

本文关键字:日志 编号 Boost      更新时间:2023-10-16

我最近尝试通过Boost日志向一个小应用程序添加一些日志记录。但是,由于某些原因,使用日志旋转我不能让它在logs目录中拾取正确的计数器。

例如,如果我的Logs目录包含Log_000.logLog_001.log文件,我希望日志记录从Log_002.log开始,但它总是从0开始。

我可能遗漏了一些东西,但如果有人能指出一些我将感激不尽。下面是我的启动代码:

void initLogging()
{
    boost::log::add_common_attributes();
    auto core = boost::log::core::get();
    core->add_global_attribute("UTCTimeStamp",boost::log::attributes::utc_clock());
    auto x = boost::log::add_file_log(
        boost::log::keywords::file_name             = "Log_%3N.log",
        boost::log::keywords::rotation_size         = 2 * 1024, // 2k
        boost::log::keywords::target                = "Logs",
        boost::log::keywords::min_free_space        = 30 * 1024 * 1024,
        boost::log::keywords::max_size              = 20 * 1024, // 20k
        boost::log::keywords::time_based_rotation   = boost::log::sinks::file::rotation_at_time_point(boost::gregorian::greg_day(31)),
        boost::log::keywords::scan_method           = boost::log::sinks::file::scan_matching,
        boost::log::keywords::format                = "%UTCTimeStamp% (%TimeStamp%) [%ThreadID%]: %Message%",
        boost::log::keywords::auto_flush            = true
        );
    auto d = x->locked_backend()->scan_for_files();
}

多谢

啊哈!看起来如果您使用add_file_log帮助器,它会自动调用scan_for_files

再次调用它似乎会导致计数器重置,所以我只是删除了对scan_for_files的调用

只是把这个作为一个答案,以防它把别人逼疯了!

这是一个工作示例

Live On Coliru

您将看到运行10次后,Logs/包含:

-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_080.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_081.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_082.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_083.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_084.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_085.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_086.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_087.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_088.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_089.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_090.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_091.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_092.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_093.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_094.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_095.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_096.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_097.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_098.log
-rw-r--r-- 1 2001 2000 998 Jul 17 16:26 Log_099.log

代码清单

#define BOOST_LOG_DYN_LINK 1
#include <boost/log/core.hpp>
#include <boost/log/common.hpp>
#include <boost/log/attributes.hpp>
#include <boost/log/sinks.hpp>
#include <boost/log/expressions.hpp>
#include <boost/log/trivial.hpp>
#include <boost/log/utility/setup/common_attributes.hpp>
#include <boost/log/utility/setup/file.hpp>
#include <string>
void initLogging()
{
    boost::log::add_common_attributes();
    auto core = boost::log::core::get();
    core->add_global_attribute("UTCTimeStamp",boost::log::attributes::utc_clock());
    auto x = boost::log::add_file_log(
            boost::log::keywords::file_name             = "Log_%3N.log",
            boost::log::keywords::rotation_size         = 1 * 1024, // 1k
            boost::log::keywords::target                = "Logs",
            boost::log::keywords::min_free_space        = 30 * 1024 * 1024,
            boost::log::keywords::max_size              = 20 * 1024,
            boost::log::keywords::time_based_rotation   = boost::log::sinks::file::rotation_at_time_point(boost::gregorian::greg_day(31)),
            boost::log::keywords::scan_method           = boost::log::sinks::file::scan_matching,
            boost::log::keywords::format                = "%UTCTimeStamp% (%TimeStamp%) [%ThreadID%]: %Message%",
            boost::log::keywords::auto_flush            = true
        );
    //auto d = x->locked_backend()->scan_for_files();
}
int main()
{
    initLogging();
    for (int i = 0; i < 20; ++i) {
        BOOST_LOG_TRIVIAL(trace) << "Let's go shopping " << std::string(400, '*');
    }
}