Параметр передачи файла конфигурации приложения log4net logz.io в теги listenerUrl и token

Чтобы настроить проект для работы в нескольких средах и использовать logz.io, мне нужно установить разные значения токена и listenerUrl в зависимости от определения сборки. В проекте есть набор файлов log4net.config, и идея заключалась в том, чтобы использовать свойства log4net globalcontext для передачи значений точно так же, как я делаю для тега шаблона макета. К сожалению, log4net сохраняет эти имена свойств (заполнители) и не заменяет их значениями из globalcontext.

У меня вопрос, как установить эти теги динамически?

Вот что я пробовал:

  1. свойства в config.
  2. Получение корневого приложения и программная установка значений:var rootAppender = LogManager.GetRepository(Assembly.GetEntryAssembly()).GetAppenders().OfType<LogzioAppender>();
  3. Создание нового объекта Appender и добавление его в hierarchy.Root.AddAppender(logzioAppender);

Конфигурация выглядит почти по умолчанию, как в документации logz.io.

<log4net>
  <appender name="LogzioAppender" type="Logzio.DotNet.Log4net.LogzioAppender, Logzio.DotNet.Log4net">
    <token value="%p{token}" />
    <type>log4net</type>
    <listenerUrl value="%p{listenerhost}:8071" />
    <bufferSize>100</bufferSize>
    <bufferTimeout>00:00:05</bufferTimeout>
    <retriesMaxAttempts>3</retriesMaxAttempts>
    <retriesInterval>00:00:02</retriesInterval>
    <debug>false</debug>

  </appender>

  <root>
    <level value="INFO" />
    <appender-ref ref="LogzioAppender" />
  </root>
</log4net>

1 ответ

Решение

По какой-то причине вариант номер 2, который я пробовал, не сработал с первой попытки. Этот код выполняет свою работу и переопределяет файл конфигурации log4net:

var logzioAppender = LogManager.GetRepository(Assembly.GetEntryAssembly()).GetAppenders().OfType<LogzioAppender>();
logzioAppender.FirstOrDefault().AddListenerUrl("https://listener_url:8071");
logzioAppender.FirstOrDefault().AddToken("key_value");
Другие вопросы по тегам