boost::log add_file_log не пишет, если приложение выходит с CTRL_CLOSE_EVENT

Я на Windows 7, использую boost::log в версии 1.54 в консольном приложении. Я использую add_file_log() с ротацией, которая отлично работает, пока моя функция main() завершает работу. Но если приложение завершается извне с помощью powershell CloseMainWindow(), файл журнала никогда не записывается.

Я настроил обработчик управления окнами с помощью SetConsoleCtrlHandler() и могу перехватывать CTRL_CLOSE_EVENT, но я не знаю, есть ли метод boost::log, который я могу вызвать, чтобы заставить файл журнала записываться до выхода моего приложения. У кого-нибудь есть решение для этого?

Спасибо,

  Rob

person Rob    schedule 15.10.2013    source источник


Ответы (1)


Две вещи, на которые вы, возможно, захотите взглянуть. Следующее основано на моем опыте

1) Журнал существует, но пуст. В этом случае используйте auto_flush для сброса журнала на диск по мере создания сообщений журнала. В противном случае вы можете получить пустой журнал, если недостаточно сообщений журнала для очистки при возникновении CTRL_CLOSE_EVENT.

2) Файл журнала закрывается, но не там, где вы думаете. В этом случае убедитесь, что файл журнала создан в том же каталоге, что и целевой каталог. Целевой каталог собирает файлы журналов при закрытии приемников. Если для ключевого слова имя_файла задано имя файла, он будет создан только в рабочем каталоге, а не в целевом каталоге. Если приложение выходит без закрытия приемников, файл не будет перемещен в целевой каталог.

ХТХ,

person Jott    schedule 25.02.2014