log4net:Configurar para ignorar mensajes de una clase específica

log4net:Configurar para ignorar mensajes de una clase específica

Claro, usa un filtro.

Aquí está el fragmento publicado en el blog, para referencia futura; todo el crédito para el autor de esa publicación de 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>

Sin duda, un filtro funciona, pero preferiría desactivar el registrador (o la jerarquía de registradores) directamente de esta manera:

<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 que se muestra deshabilitaría el inicio de sesión en todo el espacio de nombres. El segundo "ejemplo" desactiva el registro de su clase (según su pregunta).


Sugeriría usar filtros también. Sin embargo, dado que tuve problemas para encontrar la imagen completa cuando intentaba implementar el filtro, estoy publicando un fragmento de muestra del Configutation file Creé que señala dónde van los filtros.

El filtro que busca en este caso sería

Sugerencia: En el config archivo para Log4Net es importante dónde coloca sus etiquetas y la prioridad de ellas realmente importa. Así que en este caso <filter> la etiqueta viene después del <appender> etiqueta de apertura y antes de que sea <file value = ... /> etiqueta.

<?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 puedes tener múltiples appenders que puede redirigir los resultados de registro de un registrador específico a un appender separado en lugar de ignorarlos. Como uno appender para todos los registros y uno para los registros filtrados para un class específico .