68 votes

log4net: Configurez pour ignorer les messages d'une classe spécifique

Est-il possible d'avoir le log4net configuration ignorer une classe spécifique? Par exemple, nous avons en général de créer un journal dans chaque classe. Similaire à ceci:

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

Le problème est - MyClass des journaux de l'extrême quantité de données, et il devient difficile de trouver des informations sur les autres catégories. Son autre dev qui utilise MyClass donc je ne peux pas juste aller et changer les fichiers journaux, mais dans mon environnement, je tiens à les ignorer.

Puis-je mettre mon configuration le fichier d'ignorer les messages d'une classe?

85voto

jvenema Points 21499

Bien sûr, utilisez un filtre.

Voici l'extrait posté sur le blog, pour référence future - tout en mérite de l'auteur de cet article:

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

60voto

Stefan Egli Points 11708

Un filtre fonctionne certes, mais je préférerais désactiver le logger (ou la hiérarchie du logger) directement comme ceci:

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

En supposant que YourNameSpace.WithNoLogging soit un espace de noms, la configuration affichée désactiverait la journalisation sur tout l’espace de noms. Le deuxième "exemple" désactive la journalisation pour votre classe (selon votre question).

16voto

Mehrad Points 445

Je suggère l'utilisation de Filtres ainsi. Cependant, depuis que j'ai eu du mal à trouver l'ensemble de l'image quand j'ai essayé de mettre en œuvre le filtre que j'ai écris un échantillon extrait de l' Configutation file j'ai créé les points où des filtres.

Le filtre que vous êtes goning dans ce cas serait

log4net.Le filtre.LoggerMatchFilter ----(Matchs contre une le début de la nom de l'enregistreur.)

Allusion à l' config le fichier de Log4Net il est important que l'endroit où vous mettez vos mots-clés et la priorité des questions. Dans ce cas - <filter> balise vient après l' <appender>balise d'ouverture et avant d' <file value = ... /> balise.

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

Dans cette technique, vous pouvez avoir plusieurs appenders qui vous permet de rediriger les résultats de notation spécifique d'un enregistreur séparé appender , au lieu de les ignorer. Comme un appender de tous les journaux et un pour le filtrés journaux pour un class.

2voto

Orin Points 94

Vous voudrez peut-être essayer d'appliquer une catégorie à vos propres messages. Essayez ce fil de discussion: Comment ajouter un préfixe de catégorie au message log4net?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X