2009-02-11 17 views
10

Ho copiato gli esempi log4net per implementare un livello di registro personalizzato, AUDIT. Ho definito AUDIT per avere un valore di 35000, tra DEBUG 30000 e INFO 40000.Come faccio a filtrare su un livello personalizzato in log4net?

Quanto segue è la mia sezione di configurazione. Ho un appender che registra tutti i livelli e una che si suppone di accedere solo i livelli di controllo (questo è solo per i test)

<log4net> 
    <appender name="FileAppender" type="log4net.Appender.FileAppender" > 
    <file value="testrun.log" /> 
    <layout type="log4net.Layout.PatternLayout" > 
     <conversionPattern value="%date{HH:mm:ss:fff} [%thread] %-5level %logger{1} - %message%newline" /> 
    </layout> 
    </appender> 
    <appender name="FileAppender.Audit" type="log4net.Appender.FileAppender" > 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <levelToMatch value="AUDIT" /> 
    </filter> 
    <file value="testrun.audit.log" /> 
    <layout type="log4net.Layout.PatternLayout" > 
     <conversionPattern value="%date{HH:mm:ss:fff} [%thread] %-5level %logger{1} - %message%newline" /> 
    </layout> 
    </appender> 
    <root> 
    <level value="ALL" /> 
    <appender-ref ref="FileAppender" /> 
    <appender-ref ref="FileAppender.Audit" /> 
    </root> 
</log4net> 

Il metodo di prova è

private static readonly IAuditLog log = AuditLogManager.GetLogger(typeof(Program)); 
public static void Main() 
{ 
    log.Debug("Debug"); 
    log.Audit("Audit"); 
    log.Info("Info"); 
} 

Tuttavia, l'uscita dei appenders è lo stesso ...

13:09:11:540 [9] DEBUG Program - Debug 
13:09:11:560 [9] AUDIT Program - Audit 
13:09:11:560 [9] INFO Program - Info 

l'uscita log4net di debug durante l'analisi del LevelMatchFilter è

log4net: Loading Appender [FileAppender.Audit] type: [log4net.Appender.FileAppender] 
log4net:ERROR XmlHierarchyConfigurator: Unknown Level Specified [AUDIT] 
log4net:WARN Unable to set property [levelToMatch] on object [log4net.Filter.LevelMatchFilter] using value [AUDIT] (with acceptable conversion types) 
log4net: Setting Collection Property [AddFilter] to object [log4net.Filter.LevelMatchFilter] 
+0

Aggiornamento: non posso filtrare su QUALSIASI livello, anche i livelli già incorporati in log4net (come DEBUG). –

risposta

20

log4net versione 1.2.10 richiede di terminare una catena LevelMatchFilter con un DenyAllFilter se si desidera il comportamento descritto nella domanda.

<appender name="FileAppender.Audit" type="log4net.Appender.FileAppender" > 
    <filter type="log4net.Filter.LevelMatchFilter"> 
    <levelToMatch value="AUDIT" /> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
    <file value="testrun.audit.log" /> 
    <layout type="log4net.Layout.PatternLayout" > 
    <conversionPattern value="%date{HH:mm:ss:fff} [%thread] %-5level %logger{1} - %message%newline" /> 
    </layout> 
</appender> 
5

Sarà necessario aggiungere

<level> 
    <name value="AUDIT" /> 
    <value value="35000" /> 
</level> 

nella tua sezione log4net config.

Problemi correlati