如何防止升压记录器在每条记录后添加?
How to prevent boost logger to add after each record?
>我们重构了我们的记录器,以使用boost而不是我们的内部记录器,这不是线程安全的。问题是我们围绕项目的所有日志调用(数千行代码(都以 std::endl
结尾。现在,我们的记录器是线程安全的,但输出上的记录之间有一个额外的空行。 这就是我初始化记录器的方式:
void init()
{
boost::log::add_console_log
(
std::clog,
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")
<< " [" << boost::log::expressions::attr< LogLevel_e >("Severity") << "]: "
<< boost::log::expressions::smessage
)
);
}
它是一个 severity_logger_mt(( 对象,用于记录我们的消息。 我已经在他们的文档中读到,如果我创建自己的后端和前端,我也许能够防止空行发生。创建两个模块只是为了防止代码中出现一个额外的空行似乎太麻烦了。
我错过了什么吗? 有没有更简单的方法?我应该为这个问题添加更多信息吗? 此外,我们谈论的是提升 1.69。
换行符由接收器后端自动添加。修复它的"正确"方法是更改日志记录语句,以便它们不会以换行符结束消息字符串。我认为这是正确的方式,因为尾随换行符是否有意义取决于接收器后端。同一日志记录可以由多个接收器处理,换行符可能不适用于所有接收器。
但是,作为一种更快的解决方法,您可以编写自己的格式化程序,该格式化程序将跳过格式化字符串中的尾随换行符。有许多答案显示了如何编写格式化程序(例如,此处(。这是执行此操作的一种方法:
std::string_view format_message(
boost::log::value_ref< std::string, boost::log::expressions::tag::smessage > const& message)
{
// Check to see if the attribute value has been found
if (message)
{
std::string_view msg = message.get();
if (!msg.empty() && msg.back() == 'n')
msg = std::string_view(msg.data(), msg.size() - 1);
return msg;
}
return std::string_view();
}
void init()
{
boost::log::add_console_log
(
std::clog,
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")
<< " [" << boost::log::expressions::attr< LogLevel_e >("Severity") << "]: "
<< boost::phoenix::bind(&format_message, boost::log::expressions::smessage.or_none())
)
);
}
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 如何在C++中从两个单独的for循环中添加两个数组
- POCO::PostgreSQL:如何将std::vector支持添加到`Binder::bind`
- 如何仅为一个函数添加延迟
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 使用std::transform将一个范围的元素添加到另一个范围中
- C++ 仅读取输入文件中的部分(不是全部)数据以添加到记录中
- CRUD(添加/查看/编辑/删除/查看所有记录)
- 如何防止升压记录器在每条记录后添加?
- 在添加新记录和访问记录时有一个问题
- 将记录添加到文件中并将其读回
- 使用 C++ 将多个记录添加到 ADO 记录集的最快方法
- WTableView中的QueryModel:请举例说明如何添加一行并用刚刚创建的新记录填充它
- 将文件、函数、行添加到全局升压记录器
- C++类对象数组 - 添加新记录
- 向简单日志记录函数添加线程安全性
- C++,在用户确认后继续向文件添加记录
- 创建一个二进制文件,向其中添加信息,并从中读取所有记录(电话簿)
- 在二进制文件中添加特定的记录
- 如何将新的EMF记录添加到现有的Windows EMF文件