gpt4 book ai didi

c++ boost log positional(indexed) 格式对齐

转载 作者:搜寻专家 更新时间:2023-10-31 02:13:05 25 4
gpt4 key购买 nike

我正在尝试格式化 boost 日志输出,以便出于输出日志对齐的原因,选择的字段始终具有特定宽度。

add_file_log(
keywords::file_name = s.str(),
keywords::rotation_size = log_info.log_file_size,
keywords::max_size = log_info.log_file_amount * log_info.log_file_size,
keywords::target = log_info.log_path,
keywords::open_mode = std::ios::out | std::ios::app,
keywords::auto_flush = true,
keywords::format =
expressions::format("[%1%] [%2%] [%3%] [%4%] %5%")
% expressions::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S.%f")
% expressions::attr<unsigned int>("ThreadID")
% expressions::attr<string>("Scope")
% trivial::severity
% expressions::smessage
);

我尝试过不同的格式,例如

  • [%1%] [%2%] [%3%] [%|20t|%4%] %5%"
  • [%1%] [%2%] [%3%] [%-20s] %5%"
  • 平凡::严重性<< std::setw(20)

我的许多尝试都抛出了以下错误:

> Caught Exception in cyacollector main. Error: Unsupported format
> placeholder

最佳答案

目前,Boost.Log 中的expressions::format 仅支持%N% 形式的位置占位符。此格式不允许附加参数,例如宽度或精度。这主要是因为此格式化程序将已格式化的字符串插入到格式模板中,因此此时无法应用大部分参数。

但是,您可以通过将参数修改为format 来实现您想要的效果。您可以使用 max_size_decor 的组合装饰器和 std::setw 操纵器以实现日志输出中每一列的固定宽度的效果。

add_file_log(
...,
keywords::format =
expressions::format("[%1%] [%2%] [%3%] [%4%] %5%")
% expressions::max_size_decor< char >(30)[ expressions::stream << std::setw(30) << expressions::format_date_time< boost::posix_time::ptime >("TimeStamp", "%Y-%m-%d %H:%M:%S.%f") ]
% expressions::max_size_decor< char >(10)[ expressions::stream << std::setw(10) << expressions::attr<unsigned int>("ThreadID") ]
% expressions::max_size_decor< char >(20)[ expressions::stream << std::setw(20) << expressions::attr<string>("Scope") ]
% expressions::max_size_decor< char >(5)[ expressions::stream << std::setw(5) << trivial::severity ]
% expressions::smessage
);

关于c++ boost log positional(indexed) 格式对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41854774/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com