logmanager ejemplo .net log4net log4net-configuration

.net - ejemplo - Log4Net: cerrar sesión en el seguimiento de pila de excepciones solo para ciertos archivos



log4net logmanager (2)

Actualmente tengo varios archivos de registro en mi aplicación usando log4net.

Tengo un archivo de registro de nivel superior que contiene cada tipo de mensaje. También tengo un archivo de registro de errores que contiene solo información de errores. Estoy intentando configurarlo para que los detalles de la excepción específica y el seguimiento de la pila solo aparezcan en el archivo de registro de errores.

La llamada que estoy usando es Log.Error(myMessage, myException);

Mi configuración se puede ver a continuación:

<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>

A pesar del hecho de que solo he incluido% de excepción en el conversionPattern para el registro de errores, el stacktrace aparece en ambos registros. ¿Alguien sabe cómo puedo evitar que esto suceda?


Configure el diseño de esta manera (GeneralTextLog Appender):

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

Si se establece IgnoresException en false, se le dice al appender que el diseño se encargará de la excepción. Por lo tanto, puede optar por no imprimir el seguimiento de la pila.


Desde su configuración, parece que su seguimiento de pila se incluyó como parte de su parámetro de message .

EDITAR - Debería haber sido más claro. Mi conjetura es que cuando llamó a los métodos de registro de log4net, su primer parámetro (que es el message ) contenía el seguimiento de la pila, pero eso es solo una conjetura. También es el único parámetro en tus dos apegadores. Si no tiene un parámetro en su formato de appender, no debería aparecer en ambos registros ... a menos que, por supuesto, su appender con la excepción sea el appender primario.

Intenta esto en su lugar y ve qué pasa:

<!-- Loggers --> <root> <appender-ref ref="GeneralTextLog"/> <level value="ALL"/> </root> <logger name="ErrorLogger"> <appender-ref ref="ErrorTextLog"/> <levelMin value="WARN"/> <levelMax value="FATAL"/> </logger>