#c #boost #logging
#c #повышение #ведение журнала
Вопрос:
Я использую Boost.log в своем приложении. При массовом ведении журнала несколькими потоками операция ведения журнала не должна блокироваться, поэтому я регистрируюсь с помощью этого приемника:
boost::log::sinks::ordering_asynchronous_sink
в этот файл интерфейса:
boost::log::sinks::text_file_backend
Основная цель ведения журнала — просмотр критических ошибок для диагностики сбоя.
Тем не менее, я заметил, что записи записываются в файл только время от времени (вероятно, когда накапливается определенное количество записей), что означает, что внезапный сбой не оставит записей журнала, объясняющих это.
Что я могу здесь сделать? Могу ли я принудительно записать файл при ошибках фатальной серьезности? Лучший подход?
Ответ №1:
Похоже, что записи вашего журнала не сразу сбрасываются на диск. Это типичное поведение по умолчанию для повышения производительности диска (избегая слишком большого количества небольших записей), но у него есть обратная сторона, которую вы описываете здесь. Существует флаг auto_flush, который вы можете установить в своей серверной части ведения журнала, чтобы убедиться, что все записи журнала сразу записываются на диск. Смотрите документы для получения более подробной информации.
Комментарии:
1. Возможно ли контролировать, когда применяется auto_flush? Я хочу, чтобы в файл загружались только записи ошибок.
2. @Leo: Не уверен. Единственный способ, который я могу придумать, — это если вы использовали несколько серверных систем ведения журнала, по одному для каждого типа журнала.
3. @Leo. Опять же, я не уверен, так как я только немного поиграл с boost log. Лучше всего было бы попробовать опубликовать отдельный вопрос.