C++ Boost-Log-cut长日志消息 是否有可能只考虑日志消息的一部分,如果它太长(例如1000个字符)?在跟踪变量内容时,这将非常有用,因为在这些内容中,不一定要找出所需的信息

C++ Boost-Log-cut长日志消息 是否有可能只考虑日志消息的一部分,如果它太长(例如1000个字符)?在跟踪变量内容时,这将非常有用,因为在这些内容中,不一定要找出所需的信息,c++,boost,boost-log,C++,Boost,Boost Log,例如:从当前目录打印带有文件列表的字符串时,我不需要查看整个列表就可以知道文件系统是否已成功扫描 boost::log::add_file_log ( boost::log::keywords::file_name = "logs/Log_%Y-%m-%d_%H-%M-%S.log", boost::log::keywords::rotation_size = 10 * 1024 * 1024, boost::log::keywords::time_based_rotat

例如:从当前目录打印带有文件列表的字符串时,我不需要查看整个列表就可以知道文件系统是否已成功扫描

boost::log::add_file_log
(
    boost::log::keywords::file_name = "logs/Log_%Y-%m-%d_%H-%M-%S.log",
    boost::log::keywords::rotation_size = 10 * 1024 * 1024,
    boost::log::keywords::time_based_rotation = boost::log::sinks::file::rotation_at_time_point(0, 0, 0),
    boost::log::keywords::auto_flush = true,
    boost::log::keywords::format =
    (
        boost::log::expressions::stream
        << boost::log::expressions::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S:%f")
        << " [" << boost::log::expressions::attr<boost::log::attributes::current_thread_id::value_type>("ThreadID") << "]"
        << ": <" << boost::log::trivial::severity << "> " 
        << boost::log::expressions::smessage
    )
);
boost::log::添加文件\u日志
(
boost::log::keywords::file\u name=“logs/log\u%Y-%m-%d\u%H-%m-%S.log”,
boost::log::keywords::rotation\u size=10*1024*1024,
boost::log::keywords::time\u-based\u-rotation=boost::log::sinks::file::rotation\u在时间点(0,0,0),
boost::log::keywords::auto_flush=true,
boost::log::keywords::format=
(
boost::log::expressions::stream
(“时间戳,%Y-%m-%d%H:%m:%S:%f”)

自Boost 1.62以来,有一个装饰师可以满足您的要求。您可以这样使用它:

boost::log::add_file_log
(
    boost::log::keywords::file_name = "logs/Log_%Y-%m-%d_%H-%M-%S.log",
    boost::log::keywords::rotation_size = 10 * 1024 * 1024,
    boost::log::keywords::time_based_rotation = boost::log::sinks::file::rotation_at_time_point(0, 0, 0),
    boost::log::keywords::auto_flush = true,
    boost::log::keywords::format =
    (
        boost::log::expressions::stream
        << boost::log::expressions::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S:%f")
        << " [" << boost::log::expressions::attr<boost::log::attributes::current_thread_id::value_type>("ThreadID") << "]"
        << ": <" << boost::log::trivial::severity << "> " 
        << boost::log::expressions::max_size_decor(1000)
        [
            boost::log::expressions::stream << boost::log::expressions::smessage
        ]
    )
);

在本例中,
phoenix::bind
创建一个包装器函数对象,该对象从日志记录中提取消息属性值,并将其传递到
value\u ref
引用包装器中包装的
limit\u size
函数中。如果日志记录不包含消息,则引用包装器为空(这就是
或\u none
所做的)。任何
limit\u size
返回的内容都将作为格式化过程的一部分输出到流中。在这种情况下,您可以使用
boost::string\u view
boost::string\u ref
来避免复制字符串。

自boost 1.62以来,有一个修饰符可以满足您的要求。您可以这样使用它:

boost::log::add_file_log
(
    boost::log::keywords::file_name = "logs/Log_%Y-%m-%d_%H-%M-%S.log",
    boost::log::keywords::rotation_size = 10 * 1024 * 1024,
    boost::log::keywords::time_based_rotation = boost::log::sinks::file::rotation_at_time_point(0, 0, 0),
    boost::log::keywords::auto_flush = true,
    boost::log::keywords::format =
    (
        boost::log::expressions::stream
        << boost::log::expressions::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S:%f")
        << " [" << boost::log::expressions::attr<boost::log::attributes::current_thread_id::value_type>("ThreadID") << "]"
        << ": <" << boost::log::trivial::severity << "> " 
        << boost::log::expressions::max_size_decor(1000)
        [
            boost::log::expressions::stream << boost::log::expressions::smessage
        ]
    )
);
在本例中,
phoenix::bind
创建一个包装器函数对象,该对象从日志记录中提取消息属性值,并将其传递到
value\u ref
引用包装器中包装的
limit\u size
函数中。如果日志记录不包含消息,则引用包装器为空(这就是
或_none
所做的)。任何
限制_大小
返回的内容都将作为格式化过程的一部分输出到流中。在这种情况下,您可以使用
boost::string_view
boost::string_ref
来避免复制字符串