gpt4 book ai didi

c++ - 如何将严重程度与 Boost 日志中的相同宽度对齐

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:21:35 26 4
gpt4 key购买 nike

例如,'info' 和 'warning' 的宽度不同,在日志中看起来不漂亮。我想在日志中将它们对齐到相同的宽度。

看来我可以使用本文所述的自定义格式化程序工厂: boost log format single attribute with logging::init_from_stream

这是使用自定义严重级别的另一种解决方案: how do I format a custom severity_level using a format string

除此之外,是否有更简单的方法来实现这一点,就像 printf 一样自定义格式字符串?

最佳答案

您可以尝试将格式化程序设置为类似

expr::stream << std::left << std::setw(7) << std::setfill(' ') <<
logging::trivial::severity << " " << expr::smessage;

7 的宽度来自最大可能的长度('warning')。如果您使用自定义严重级别,则应更改它。

这里有一个更完整的例子(为简单起见省略了头文件):

namespace logging = boost::log;
namespace expr = boost::log::expressions;
namespace sinks = boost::log::sinks;
namespace keywords = boost::log::keywords;

using namespace logging::trivial;

logging::sources::severity_logger<severity_level> s_log;

void init_logging(const std::string& log_dir)
{
boost::shared_ptr<logging::core> core = logging::core::get();
boost::shared_ptr<sinks::text_file_backend> backend =
boost::make_shared<sinks::text_file_backend>(
keywords::file_name = log_dir + "/l_%Y-%m-%d_%5N.log", // one file per date and execution
keywords::rotation_size = 512 * 1024); // rotate after 512KB

// Collect clashing logs
backend->set_file_collector(sinks::file::make_collector(keywords::target = log_dir));
backend->scan_for_files();

typedef sinks::synchronous_sink<sinks::text_file_backend> sink_t;
boost::shared_ptr<sink_t> sink(new sink_t(backend));
sink->locked_backend()->auto_flush(true);
sink->set_formatter(expr::stream <<
"[" << expr::attr<boost::posix_time::ptime>("TimeStamp") << "] " <<
std::left << std::setw(7) << std::setfill(' ') << logging::trivial::severity << " " <<
expr::smessage);
core->add_sink(sink);

s_log.add_attribute("TimeStamp", logging::attributes::local_clock());
}

关于c++ - 如何将严重程度与 Boost 日志中的相同宽度对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40859158/

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