Подтвердить что ты не робот

Log4Net - Выйти из Exception stacktrace только для определенных файлов

В настоящее время у меня есть несколько файлов журналов в моем приложении, используя 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>

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

4b9b3361

Ответ 1

Настройте такой макет (GeneralTextLog Appender):

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

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

Ответ 2

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

EDIT. Я должен был быть более ясным. Я предполагаю, что когда вы вызывали методы ведения журнала log4net, ваш первый параметр (который message) содержал трассировку стека, но это всего лишь предположение. Это также единственный параметр в обоих ваших приложениях. Если у вас нет параметра в вашем формате appender, он не должен появляться в обоих журналах... если, конечно, ваш appender с исключением не является основным приложением.

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

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

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