Новая строка автоматически добавляется бэкэндом приемника. «Правильный» способ исправить это - изменить операторы записи в журнал, чтобы они не заканчивали строку сообщения новой строкой. Я считаю, что это правильный путь, потому что, имеет ли смысл завершающий перевод новой строки, зависит от внутреннего интерфейса. Одна и та же запись журнала может обрабатываться несколькими приемниками, и новая строка может не подходить для всех из них.
Однако, в качестве более быстрого обходного пути, вы можете написать свой собственный форматер, который пропустит завершающий перевод строки из отформатированной строки. Есть несколько ответов, показывающих, как написать форматтер (например, здесь ). Вот один из способов сделать это:
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())
)
);
}