Использование переменных файла конфигурации boost::log

Я использую библиотеку журналов Boost 1.63.0 в приложении. Для инициализации различных файлов журналов я использую метод boost::log::init_from_stream(...) для настройки приемников из INI-файла конфигурации.

Первоначально у меня была проблема с поведением вращения файлов в журнале повышения. Файл создавался в текущем рабочем каталоге, а затем перемещался в «целевой» каталог при запуске ротации файлов или закрытии приложения. Желаемым поведением было создание файла непосредственно в «целевом» каталоге. Я исправил это с помощью этого сообщения: boost::log add_file_log не пишется, если приложение закрывается с помощью CTRL_CLOSE_EVENT

Короче говоря, он говорит предоставить ключевому слову «FileName» полную информацию о пути, а не только имя. Это работает, но мне было интересно, есть ли хороший способ «очистить» файл конфигурации.

Например, файл INI в настоящее время требует, чтобы вы указали как ключевые слова «Target», так и «FileName» как таковые:

Target="C:\\ProgramData\\MyApplication\\Logs"
FileName="C:\\ProgramData\\MyApplication\\Logs\\AppLog_%N.log"

Было бы очень хорошо иметь возможность указать только каталог «Цель», а затем использовать эту переменную в определении переменной «Имя файла». Это сделало бы любые будущие изменения намного проще, поскольку нужно было бы изменить только одну вещь. Что-то типа:

#Define Target Directory for file rotation
Target="C:\\ProgramData\\MyApplication\\Logs"

#Define File Name pattern
FileName="%Target%\\AppLog_%N.log"
     ---  OR ---
FileName="$(Target)\\AppLog_%N.log"

Возможно ли это сделать?


person Peter Carta    schedule 21.11.2017    source источник


Ответы (1)


Boost.Log не выполняет расширение переменных, вам придется сделать это самостоятельно. Вы можете загрузить файл настроек в settings, вызвав parse_settings. Затем вы можете работать с этим контейнером и расширять переменные. Когда вы закончите, вы можете использовать его для инициализации библиотеки ведения журнала, вызвав init_from_settings.

person Andrey Semashev    schedule 22.11.2017