2009-04-15 7 views
4

Je veux filtrer les messages qui contiennent une chaîne spécifiée. J'ai utilisé log4net.Filter.StringMatchFilter mais cela s'applique uniquement aux appenders.Pouvez-vous filtrer au niveau Logger dans log4net

Je voudrais déjà filtrer ce message au niveau de l'enregistreur. Quelque chose le long de ces lignes:

<logger name="MyLogger.WebServices"> 
    <level value="Debug" /> 
    <filter type="log4net.Filter.StringMatchFilter"> 
     <stringToMatch value="do not log me" /> 
     <acceptOnMatch value="false" /> 
    </filter> 
    <appender-ref ref="file" /> 
    <appender-ref ref="debug" /> 
</logger> 

Est-il réellement possible de cette façon? Ou existe-t-il une façon différente de gérer cette situation?

Répondre

11

Les filtres sont destinés à être utilisés uniquement avec des appenders. Si vous avez besoin de filtrer les événements pour plusieurs appenders, vous pouvez pré-filtrer en utilisant un forwardingappender. De cette façon, vous évitez d'avoir à copier et coller le même filtre sur plusieurs appenders.

Votre exemple ressemblerait à ceci:

<appender name="screeningAppender" type="log4net.Appenders.ForwardingAppender"> 
    <filter type="log4net.Filter.StringMatchFilter"> 
      <stringToMatch value="do not log me" /> 
      <acceptOnMatch value="false" /> 
    </filter> 

    <appender-ref ref="file" /> 
    <appender-ref ref="debug" /> 
</appender> 

<logger name="MyLogger.WebServices"> 
    <level value="Debug" /> 
    <appender-ref ref="screeningAppender" /> 
</logger> 
+0

C'est ce que je craignais. À votre santé! – Rashack

+0

J'avais pensé créer un appender personnalisé ou dériver d'un environnement qui était sensible à l'environnement (par exemple dev ou production), mais j'aime l'idée de déplacer ceci vers un filtre pour "donner" tous les appenders de cette capacité. – Kit

+0

Malheureusement, cela n'a pas fonctionné pour moi. J'utilisais un filtre LevelToMatch et il ne renvoyait pas. Peut-être que c'est parce que le filtre était un acceptOnMatch = true avec un denyAll suivant ... ne sais pas. – Alex

Questions connexes