2010-05-14 12 views
5

Di puse mi log4net de maxLevel registrador minLevel y para FATAL y DEBUG respectivamente, pero bajo algún escenario que desea silenciar el diario de los artículos escritos en el nivel WARN y mantener todos los demás niveles en el rango activo.El descarte de varios niveles de registro en un intervalo con log4net

¿Es posible de alguna manera utilizar niveles 'discretos' de niveles de registro en lugar de especificar un rango usando minLevel y maxLevel?

Supongo que esto debería ser simple, pero no he encontrado ningún documento de log4net o ejemplos relacionados con este problema.

Respuesta

7

Puede usar el LevelMatchFilter en su appender.

Ejemplo:

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="DEBUG" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="INFO" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="ERROR" /> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
    ... 
</appender> 

Este ejemplo sólo se DEBUG de impresión; Mensajes INFO y ERROR. Es fácil personalizar esto de acuerdo a sus necesidades.

Nota: No olvide el DenyAllFilter al final.

+0

¡Hola! Gracias por la respuesta rápida. ¿Se puede hacer programáticamente? solo encontré una forma de cambiar el nivel de registro del Logger (raíz), no de los apéndices. –

+0

lo siento, me perdí tu comentario. debería ser posible también programáticamente. aquí puede ver cómo llegar a todos los appenders: http://stackoverflow.com/questions/3016108/change-log4net-conversion-pattern-or-layout-at-runtime/3031867#3031867 –

0

Uso LevelRangeFilter

<filter type="log4net.Filter.LevelRangeFilter"> 
    <levelMax value="FATAL" /> 
    <levelMin value="ERROR" /> 
</filter> 
+2

Oye, ya que ese es el uso natural de forma, probé esta opción pero me obliga a registrar también los mensajes con niveles * entre * FATAL y ERROR, que no quiero (aunque ERROR y FATAL son adyacentes, el principio todavía se aplica). ¡Gracias de todos modos! –

2

Es genial cómo filtros log4net todos pueden ser combinados para lograr el resultado deseado. Todas las entradas de registro de forma predeterminada tienen una disposición de filtro "Neutral" y log4net registra de manera predeterminada todas las entradas que son neutrales.

Lo que el LevelRangeFilter va a hacer es si el nivel de la entrada está en el rango, se establece la disposición de filtro a "Aceptar" (o dejar su disposición, ya que era si el parámetro acceptOnMatch se establece en false) y marcará todas las entradas que no estén en el rango con una disposición de "Denegar".

El LevelMatchFilter fijará la disposición para el filtro especificado en el parámetro levelToMatch a "Aceptar" a menos que el acceptToMatch se establece en false, entonces será establecer entradas coincidentes a "Denegar", las entradas incomparables serán dejadas a lo que eran antes de.

Entonces, ¿qué se puede hacer es usar una combinación de los dos filtros para obtener lo que desea:

<appender name="FilteredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender"> 
    <filter type="log4net.Filter.LevelRangeFilter"> 
     <levelMax value="FATAL" /> 
     <levelMin value="ERROR" /> 
    </filter> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="WARN" /> 
     <acceptOnMatch value="false" /> 
    </filter> 
</appender> 

Esto le permitirá fácilmente alternar el campo Advertir nivel de encendido y apagado. Todas las entradas que están fuera del rango ya están marcadas como "Denegar" y el LevelMatchFilter aquí marcará las entradas de nivel de ADVERTENCIA también para negar, por lo que no es necesario el DenyAllFilter.

Cuestiones relacionadas