Обнаружил две проблемы, когда использовал глобальный лог для локализации ошибок:
Недостаточный размер буфера для форматирования сообщения в глобальном логгере. Так как в строке форматирования используется формат наподобие "%10s", то требуемый размер будет не меньше 10, что нужно учитывать при расчётах.
Глобальный логгер перестаёт писать сообщения после завершения сессии, в которой использовался локальный логгер. Тут вкралась небольшая ошибка при рефакторинге (7cf217): в деструкторе TinyLog статическая переменная instance_ обнуляется. Поэтому как только локальный логгер удалился, он обнулит переменную глобального инстанса, теряя его. Если после этого что-нибудь написать в глобальный лог, то будет создан новый экземпляр логгера, который не связан с каким-либо файлом. Исправление простое - не обнулять instance_ в деструкторе TinyLog. Фактически instance_ будет уничтожен и обнулён в деструкторе TWinSCPPlugin, что обеспечивает необходимую глобальность.
Обнаружил две проблемы, когда использовал глобальный лог для локализации ошибок:
7cf217
): в деструктореTinyLog
статическая переменнаяinstance_
обнуляется. Поэтому как только локальный логгер удалился, он обнулит переменную глобального инстанса, теряя его. Если после этого что-нибудь написать в глобальный лог, то будет создан новый экземпляр логгера, который не связан с каким-либо файлом. Исправление простое - не обнулятьinstance_
в деструктореTinyLog
. Фактическиinstance_
будет уничтожен и обнулён в деструктореTWinSCPPlugin
, что обеспечивает необходимую глобальность.Пулл реквест исправляет указанные проблемы.