исключение Boostlog, когда дата изменилась на следующий день - PullRequest
0 голосов
/ 28 октября 2018

Я использую лог буста этой конфигурацией.

[Sinks.2]
Filter="%Severity% >= 2"
Destination=TextFile
AutoFlush=true   
Format="[%TimeStamp%] [%ThreadID%] <%Severity%> %Message%"
Asynchronous=false                                        

Target="logs"                                              
FileName="logs/quo.%Y%m%dT%H%M%S.%a.%5N.log.detail"
RotationTimePoint="00:00:00"                               
RotationSize=104857600                                     
MinFreeSpace=4294967296                                    
MaxSize=4294967296                                         
ScanForFiles=All

при изменении даты на следующий день.мой программный сбой по исключению: завершается вызов после выброса экземпляра

'boost::filesystem::filesystem_error'
  what():  boost::filesystem::last_write_time: No such file or directory: "/root/work/hy-trade/bin/debug/logs/quo.20181027T173106.Sat.00000.log.detail"

. Я проверяю свое дисковое пространство, нахожу в конфигурации меньше свободного места, чем MinFreeSpace, и файл quo.20181027T173106.Sat.00000.log.детали не существует.

как избежать этого исключения?

версия надстройки - 1.67

спасибо

1 Ответ

0 голосов
/ 30 октября 2018

Похоже, кто-то уже удалил файл журнала до его поворота.Это может быть внешний процесс или Boost.Log.

С Boost.Log это может произойти, если у вас есть несколько приемников файлов, которые записывают файлы журнала в один и тот же каталог, который также используется в качестве целевого каталога.для повернутых файлов (т. е. параметр FileName включает путь, указанный в параметре Target, и есть несколько приемников, которые используют этот путь).Проблема заключается в том, что, согласно ScanForFiles = All, библиотека сканирует целевой каталог для любых файлов, но не обновляет счетчик файлов, который будет использоваться для создания новых файлов.Это означает, что если файл «quo.20181027T173106.Sat.00000.log.detail» присутствовал в этом каталоге при запуске вашего процесса, он будет считаться старым файлом, даже если при запуске ваш процесс будет по-прежнему записывать новые журналыв этот файл.Затем, когда происходит ротация файла и превышаются лимиты хранения (например, если MinFreeSpace не выполняется), этот файл может быть удален.Поворот должен произойти в другом приемнике, который все еще хранит файлы в том же каталоге «logs».

Чтобы решить эту проблему, вы можете выполнить одно из следующих действий:

  • Использовать ScanForFiles =Соответствует вашим настройкам, чтобы счетчик файлов обновлялся после сканирования.Это гарантирует, что новые файлы журналов имеют уникальные имена и не будут удалены преждевременно.
  • Запись файлов журналов в другой каталог из целевого хранилища.Т.е. укажите FileName, чтобы он не указывал на тот же каталог, что и Target.

Кроме того, вы можете добавить обработку исключений, чтобы избежать сбоев в случае возникновения ошибок (которые по-прежнему могут происходить по любой причинепо операциям с файловой системой).См. здесь и здесь для получения дополнительной информации (также перейдите по ссылкам в этих разделах).

...