Настройте Log4Net так, чтобы он не использовал smtp appender при работе на определенной машине

StackOverflow https://stackoverflow.com/questions/620248

  •  03-07-2019
  •  | 
  •  

Вопрос

Я настраиваю SMPTAppender для отправки файлов журналов по электронной почте при возникновении ошибки в рабочем коде. На некоторых компьютерах, например на локальных тестовых компьютерах, я не хочу отправлять электронную почту.

Я пытался использовать переменную среды COMPUTERNAME в фильтре свойств, но это не сработало:

<filter type="log4net.Filter.PropertyFilter">
  <Key value="COMPUTERNAME" />
  <StringToMatch value="myComputerName" />
  <Accept value="false" />
</filter>

Я использовал ComputerName в приложении для работы с файлами следующим образом:

<file value="${HOMEDRIVE}\\loggingDirectory\\AppLogFile.${COMPUTERNAME}.log" />

Это также не сработало (и я этого не ожидал):

<filter type="log4net.Filter.PropertyFilter">
  <Key value="${COMPUTERNAME}" />
  <StringToMatch value="myComputerName" />
  <Accept value="false" />
</filter>

Есть ли способ использовать переменные среды в фильтре свойств? Другие предложения приветствуются.

Это было полезно?

Решение

Вы используете неверное значение ключа. Коллекция LoggingEvent.Properties заполняется свойством HostName, которое имеет " log4net: HostName " подпись.

Ваш фильтр должен выглядеть следующим образом:

<filter type="log4net.Filter.PropertyFilter">
    <Key value="log4net:HostName" />
    <StringToMatch value="computerToExclude" />
    <AcceptOnMatch value="false" />
</filter>

Обратите внимание также на использование AcceptOnMatch, а не Accept.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top