Я использую Boost v1.54, и я хотел бы просто изменить стандартный формат приемника logging :: core, но не нашел способа сделать это. в Форматирование записи журнала в документации они показывают только, как изменить формат для пользовательских приемников, например файлы журналов, а не по умолчанию? Есть ли способ глобально установить формат по умолчанию в Boost Log?
Вот что они делают:
void init()
{
logging::add_file_log
(
keywords::file_name = "sample_%N.log",
keywords::rotation_size = 10 * 1024 * 1024,
keywords::time_based_rotation = sinks::file::rotation_at_time_point(0, 0, 0),
keywords::format = "[%TimeStamp%]: %Message%");
logging::core::get()->set_filter
(
logging::trivial::severity >= logging::trivial::info
);
}
Это то, что я хотел бы:
void init()
{
logging::core::get()->set_default_format("[%TimeStamp%]: %Message%");
logging::core::get()->set_filter
(
logging::trivial::severity >= logging::trivial::info
);
}
Не уверен, почему вы хотели бы сделать это, потому что ничего особенного в этом нет.
Это невозможно, но для этого есть причины.
Если вы посмотрите в boost_1_54_0 / boost / log / core / core.hpp, он не позволяет ничего устанавливать, кроме атрибутов, что само по себе является отличной функцией.
Возвращаясь, один приемник может иметь много типов потоков одновременно.
Для ядра у вас может быть только один приемник, на который вы можете добавить столько потоков, сколько захотите. Потоки могут быть такими же разнообразными, как и ваши требования. НО формат будет применяться к стоку — все потоки.
Итак, вот как вы смотрите на отношения:
Вы публикуете один раз, и он будет идти во все потоки в формате, который вы применили.
Один второстепенный пример по той же ссылке.
Также приведен пример кода для использования нескольких потоков.
shared_ptr< std::ostream > strm(new std::ofstream("test.log"));
mSink->locked_backend()->add_stream(strm);
shared_ptr< std::ostream > pStream(&std::clog, logging::empty_deleter());
mSink->locked_backend()->add_stream(pStream);mSink->set_formatter
(
expr::format("%1%:[%2%] %3%")
% expr::attr< boost::posix_time::ptime >("TimeStamp")
//% expr::attr< boost::thread::id >("ThreadID")
% expr::smessage
);
Других решений пока нет …