我有一个多线程应用程序,我想使用boost-log。我用的是boost 1.81
要记录我使用宏
BOOST_LOG_TRIVIAL
在这里我配置boost-log:
logging::register_simple_formatter_factory<logging::trivial::severity_level, char>("Severity");
logging::register_simple_filter_factory<logging::trivial::severity_level, char>("Severity");
std::ifstream file("log.config");
logging::init_from_stream(file);
logging::add_common_attributes();
下面是log.config的内容:
[Core]
DisableLogging=false
#Filter="%Severity% > info"
# Sink settings sections
[Sinks.File]
# Sink destination type
Destination=TextFile
# Sink-specific filter. Optional, by default no filter is applied.
Filter="%Severity% > trace"
# Formatter string. Optional, by default only log record message text is written.
Format="[%TimeStamp%] %Message%"
FileName="Log_%d%m%y_%3N.log"
Target="logs"
RotationSize= 5242880 # 5MB
# The flag shows whether the sink should be asynchronous
Asynchronous=false
# Enables automatic stream flush after each log record.
AutoFlush=true
输出日志文件包含损坏的行或截断/重叠的行,如下所示:
我怎样才能实现一个日志文件没有这些问题?
我假设boost会处理并发,有办法启用它吗?
1条答案
按热度按时间hfwmuf9z1#
我试图用一个最小的可重复的例子来重现我的问题。我无法重现该问题。
深入查看我的代码,我发现我的单例实现有一个bug,boost日志配置被执行了两次:
双升压配置产生上述误差。我添加了这个作为答案,以指导那些在日志文件中有损坏/重叠/截断行的相同错误的人。