log4net:Configura per ignorare i messaggi da una classe specifica

log4net:Configura per ignorare i messaggi da una classe specifica

Certo, usa un filtro.

Ecco lo snippet pubblicato sul blog, per riferimento futuro:tutto merito dell'autore di quel post sul 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>

Un filtro funziona sicuramente, ma preferirei disattivare il logger (o la gerarchia dei logger) direttamente in questo modo:

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

Supponendo che YourNameSpace.WithNoLogging è uno spazio dei nomi, la configurazione mostrata disabiliterebbe la registrazione sull'intero spazio dei nomi. Il secondo "esempio" disattiva la registrazione per la tua classe (in base alla tua domanda).


Suggerirei di usare anche i filtri. Tuttavia, poiché ho faticato a trovare l'intera immagine quando stavo cercando di implementare il filtro, sto postando uno snippet di esempio del Configutation file Ho creato che indica dove vanno i filtri.

Il filtro che stai cercando in questo caso sarebbe

Suggerimento: Nel config file per Log4Net è importante dove metti i tuoi tag e la loro priorità conta davvero. Quindi in questo caso <filter> il tag viene dopo il <appender> tag di apertura e prima che sia <file value = ... /> tag.

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

In questa tecnica puoi avere più appenders che puoi reindirizzare i risultati di registrazione di un logger specifico a un appender separato invece di ignorarli. Ad esempio un appender per tutti i log e uno per i log filtrati per uno specifico class .