Boost Log изменяет стандартное ведение журнала :: основной форматер?

Я использую 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
);
}

3

Решение

Не уверен, почему вы хотели бы сделать это, потому что ничего особенного в этом нет.
Это невозможно, но для этого есть причины.

Если вы посмотрите в 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
);
3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector