name logger instalar application c# logging log4net

c# - logger - log4net levels



log4net: Configure para ignorar mensajes de una clase especĂ­fica (4)

Claro, usa un filter.

Aquí está el fragmento publicado en el blog, para referencia futura: todo el crédito al autor de esa publicación del blog:

<filter type="log4net.Filter.LoggerMatchFilter"> <!-- allows this sub-namespace to be logged... --> <loggerToMatch value="Noisy.Namespace.But.Important" /> </filter> <filter type="log4net.Filter.LoggerMatchFilter"> <!-- ...but not the rest of it --> <loggerToMatch value="Noisy.Namespace" /> <acceptOnMatch value="false" /> </filter>

¿Hay alguna manera de que la configuración de log4net ignore una clase específica? Por ejemplo, generalmente creamos un registro en cada clase. Similar a ésto:

private static readonly ILog Log = log4net.LogManager.GetLogger("MyClass");

El problema es que MyClass registra una cantidad extrema de datos y se vuelve difícil encontrar información sobre otras clases. Es otro desarrollador que usa MyClass así que no puedo entrar y cambiar los archivos de registro, pero en mi entorno me gustaría ignorarlos.

¿Puedo configurar mi archivo de configuration para que ignore los mensajes de una clase específica?



Sugeriría usar Filters también. Sin embargo, dado que tuve problemas para encontrar la imagen completa cuando estaba tratando de implementar el filtro, estoy publicando un fragmento de muestra del Configutation file que creé, que indica dónde van los filtros.

El filtro que está buscando en este caso sería

log4net.Filter.LoggerMatchFilter ---- (Coincide con el inicio del nombre del registrador).

Sugerencia en el archivo de config para Log4Net , es importante dónde coloca sus etiquetas y la prioridad de las mismas realmente importa. Entonces, en este caso, la etiqueta <filter> viene después de la etiqueta de apertura <appender> y antes de su etiqueta <file value = ... /> .

<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net> <appender name="RollingFile.PassedDevices" type="log4net.Appender.RollingFileAppender"> <filter type="log4net.Filter.LoggerMatchFilter"> <loggerToMatch value="Foo.namespace.bar.mySubclass" /> <acceptOnMatch value="false" /> </filter> <file value="myPassedDevices.log" /> <appendToFile value="true" /> <maximumFileSize value="100KB" /> <maxSizeRollBackups value="2" /> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%timestamp %level - %message [%thread] %logger%newline" /> </layout> </appender> <root> <level value="DEBUG" /> <appender-ref ref="RollingFile" /> <!-- My other appender which logs all and I cut it out in this snippet. Remember that you should reference all your appenders in this tag to make them work.--> <appender-ref ref="RollingFile.PassedDevices" /> </root> </log4net> </configuration>

En esta técnica, puede tener múltiples appenders que pueden redirigir los resultados de registro de un registrador específico a un appender separado en lugar de ignorarlos. Como un appender para todos los registros y uno para los registros filtrados para una class específica.


Un filtro ciertamente funciona, pero preferiría apagar el registrador (o la jerarquía del registrador) directamente así:

<logger name="YourNameSpace.WithNoLogging" additivity="false"> <level value="OFF" /> </logger> <logger name="MyClass" additivity="false"> <level value="OFF" /> </logger> <root> <level value="ALL" /> <appender-ref ref="YourAppender" /> </root>

Suponiendo que YourNameSpace.WithNoLogging es un espacio de nombres, la configuración mostrada inhabilitará el inicio de sesión en todo el espacio de nombres. El segundo "ejemplo" desactiva el registro para su clase (según su pregunta).