Log4Net - выход из трассировки стека исключений только для определенных файлов
В настоящее время у меня есть несколько файлов журнала в моем приложении, используя 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 ответа
Настройте макет следующим образом (GeneralTextLog Appender):
<layout type="log4net.Layout.PatternLayout">
<IgnoresException value="False" />
...
настройка IgnoresException
значение false говорит аппендеру, что макет позаботится об исключении. Таким образом, вы можете не печатать трассировку стека.
Из вашей конфигурации, похоже, что ваша трассировка стека была включена как часть вашего 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>