Log4Net - выход из трассировки стека исключений только для определенных файлов - PullRequest
22 голосов
/ 07 сентября 2010

В настоящее время в моем приложении используется несколько файлов журнала, использующих log4net.

У меня есть файл журнала верхнего уровня, который содержит все типы сообщений.У меня также есть файл журнала ошибок, который содержит только информацию об ошибках.Я пытаюсь настроить его так, чтобы конкретные сведения об исключении и трассировка стека появлялись только в файле журнала ошибок.

Используемый мной вызов Log.Error(myMessage, myException);

Моя конфигурация показана ниже:

<configuration>
  <log4net>

    <root>
     <level value="ALL"/>
     <appender-ref ref="GeneralTextLog"/>
     <appender-ref ref="ErrorTextLog"/>
    </root>

<!-- The general appender rolls by date -->
<appender name="GeneralTextLog" type="log4net.Appender.RollingFileAppender">
  <filter type="log4net.Filter.LevelRangeFilter">
    <level value="ALL"/>
  </filter>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d{HH:mm:ss.fff} [%type] %-5p %message%n"/>
  </layout>
  <rollingStyle value="Date"/>
  <file value="C:/Logs/General_"/>
  <datePattern value="yyyy_MM_dd'.log'" />
  <appendToFile value="true"/>
  <staticLogFileName value="false"/>
</appender>

<!-- The Error appender rolls by date -->
<appender name="ErrorTextLog" type="log4net.Appender.RollingFileAppender">
  <filter type="log4net.Filter.LevelRangeFilter">
    <levelMin value="WARN"/>
    <levelMax value="FATAL"/>
  </filter>
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%d{HH:mm:ss.fff} [%type] %-5p %message%newline%exception"/>
  </layout>
  <rollingStyle value="Date"/>
  <file value="C:/Logs/Error_"/>
  <datePattern value="yyyy_MM_dd'.log'" />
  <appendToFile value="true"/>
  <staticLogFileName value="false"/>
</appender>

<!-- Loggers -->
<logger name="DefaultLogger">
  <appender-ref ref="GeneralTextLog"/>
  <level value="ALL"/>
</logger>

<logger name="ErrorLogger">
  <appender-ref ref="ErrorTextLog"/>
  <levelMin value="WARN"/>
  <levelMax value="FATAL"/>
</logger>

Несмотря на то, что я включил только исключение% в translationPattern для журнала ошибок, трассировка стека появляется в обоих журналах.Кто-нибудь знает, как я могу предотвратить это?

Ответы [ 2 ]

39 голосов
/ 07 сентября 2010

Настройте макет следующим образом (GeneralTextLog Appender):

<layout type="log4net.Layout.PatternLayout">
    <IgnoresException value="False" />
    ...

Если для IgnoresException указано значение false, это означает, что макет позаботится об исключении.Таким образом, вы можете не печатать трассировку стека.

0 голосов
/ 07 сентября 2010

Из вашей конфигурации похоже, что трассировка вашего стека была включена в ваш параметр message.

РЕДАКТИРОВАТЬ - Я должен был быть яснее. Я предполагаю, что когда вы вызывали методы ведения журнала log4net, ваш первый параметр (message) содержал трассировку стека, но это всего лишь предположение. Это также единственный параметр в обоих ваших дополнениях. Если у вас нет параметра в формате вашего приложения, он не должен отображаться в обоих журналах ... если, конечно, ваш приложение за исключением основного приложения.

Попробуйте вместо этого и посмотрите, что произойдет:

<!-- Loggers -->
<root>
  <appender-ref ref="GeneralTextLog"/>
  <level value="ALL"/>
</root>

<logger name="ErrorLogger">
  <appender-ref ref="ErrorTextLog"/>
  <levelMin value="WARN"/>
  <levelMax value="FATAL"/>
</logger>
...