2012-11-06 9 views
10

Ho configurato log4net con un RollingLogFileAppender e SmtpAppender, con l'intenzione di registrare il livello di debug al RollingLogFileAppender e fatale solo al SmtpAppender:Log4Net LevelEvaluator Ignorata in bufferSize maggiore di 1 per SmtpAppender

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> 
    <to value="[email protected]" /> 
    <from value="[email protected]" /> 
    <subject value="Fatal Error" /> 
    <smtpHost value="smtp.test.com" /> 
    <SMTPPort value="366"/> 
    <Username value="[email protected]"/> 
    <Password value="password"/>  
    <bufferSize value="1" /> 
    <lossy value="true" /> 
    <evaluator type="log4net.Core.LevelEvaluator"> 
    <threshold value="FATAL"/> 
    </evaluator>  
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline"        /> 
    </layout> 
</appender> 

<root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingLogFileAppender" /> 
    <appender-ref ref="SmtpAppender" /> 
</root> 

Questo funziona perfettamente finché non aumento il bufferSize. Quando lo faccio, tutti i livelli vengono inviati via e-mail e il log4net.Core.LevelEvaluator sembra essere ignorato. Ho anche provato a utilizzare LevelRangeFilter e LevelMatchFilter ma con questi configurati non ho ricevuto alcuna email.

risposta

10

Il programma di valutazione non viene ignorato, ma non fa ciò che ci si aspetta: le impostazioni richiedono all'appender di inserire tutti i messaggi di registro su un buffer e di inviare un'e-mail solo quando viene registrato un messaggio con livello FATAL. Se il buffer è pieno, vengono eliminati i messaggi meno recenti (ovvero l'impostazione con perdita: senza di essa si otterrebbe anche un'e-mail non appena il buffer è pieno).

Se si desidera filtrare i messaggi, è necessario utilizzare un filtro. Per esempio in questo modo:

<filter type="log4net.Filter.LevelMatchFilter"> 
    <acceptOnMatch value="true" /> 
    <levelToMatch value="FATAL" /> 
</filter> 
<filter type="log4net.Filter.DenyAllFilter" /> 

Non sono sicuro però se vorrei prendere in considerazione il mio appender mail come questa in quanto vorrei ricevere la notifica immediatamente se la mia domanda ha un problema che ha bisogno di accedere con livello di FATAL.

+0

Grazie Stefan, non ho apprezzato il fatto che non stavo ricevendo tutti i log fino a quando non è stato generato il FATAL. Ora capisco, quella configurazione funziona davvero bene per me! Grazie ancora per la risposta. –

Problemi correlati