2016-08-11 3 views
1

Ich verwende Log4Net für die Protokollierung aller Arten von Ereignissen in meiner Anwendung. Deshalb habe ich einen fileAppender und einen smtpAppender konfiguriert. Während der DateiAppender alles protokolliert, sollte der smptAppender mir nur eine E-Mail senden, wenn die Protokollierungsstufe FATAL ist.Log4Net smtpappender ignoriert Ebenenfilter

Im Moment sendet Log4Net mir E-Mails für beide Fehler und FATAL-Ebene.

Das ist meine Konfiguration:

<log4net> 
    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\Temp\xxx.txt" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maximumFileSize value="10MB" /> 
    <staticLogFileName value="true" /> 
    <maxSizeRollBackups value="150" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <header value="DateTime | Thread | Level | ClassName | Message" /> 
     <conversionPattern value="%date | %thread | %-5level | %logger | %message%newline" /> 
    </layout> 
    </appender> 
    <appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> 
    <filter type="log4net.Filter.LevelMatchFilter"> 
     <acceptOnMatch value="true" /> 
     <levelToMatch value="FATAL" /> 
    </filter> 
    <filter type="log4net.Filter.DenyAllFilter" /> 
    <to value="xxx" /> 
    <from value="xxx" /> 
    <subject value="Error" /> 
    <smtpHost value="xxx" /> 
    <bufferSize value="512" /> 
    <lossy value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date | %thread | %-5level | %logger | %message%newline" /> 
    </layout> 
    </appender> 
    <root> 
    <level value="ALL" /> 
    <appender-ref ref="FileAppender" /> 
    <appender-ref ref="SmtpAppender" /> 
    </root> 
</log4net> 

Ich verwende die neueste Log4Net Version [1.2.15] 2.0.5.

Seltsamerweise filtert der smptAppender die INFO- und DEBUG-Ebene mit dieser Konfiguration.

Die Verwendung des Level-Evaluators oder des Level-Bereichs anstelle des Level-Match-Filters funktionierte ebenfalls nicht.

-Auswertungs:

<evaluator type="log4net.Core.LevelEvaluator"> 
    <threshold value="FATAL"/> 
</evaluator> 

Level-Range-Filter:

<filter type="log4net.Filter.LevelRangeFilter"> 
    <param name="LevelMin" value="FATAL"/> 
    <param name="LevelMax" value="FATAL"/> 
</filter> 

Ich weiß, dass es viele Threads zu diesem Thema hier auf Stackoverflow, aber keiner von ihnen konnte mir bei meinem Problem helfen.

Themen mit dem gleichen Thema:

How do I configure a log4net SmtpAppender to only send me e-mails when a certain level is hit?

Log4j2: SMTPAppender does not send mails with error or fatal level

Log4Net LevelEvaluator Ignored when bufferSize greater than 1 for SmtpAppender

Antwort

0

gut weiß ich, dass diese Frage ist ziemlich alt, aber ich poste diese Antwort für andere mit diesem Problem.

Sie verwenden die Einstellungen "verlustbehaftet" und "puffergröße". Ich schätze, dass es die letzten 512 Ereignisse (nicht nur die FATAL-Ereignisse) abruft, wenn das Protokoll ein FATAL-Ereignis erreicht.

Anstatt einen LevelMatchFilter oder einen LevelEvaluator zu verwenden, können Sie einfach mit einem einfachen "Schwellenwert" testen (nicht in einem Evaluator).

Weitere Informationen finden Sie unter Why do Log4Net Filters Receive Messages Outside of the Evaluator Threshold?.

Aber ich denke, dass Sie in diesem Fall keine anderen Ereignisse in der E-Mail erhalten werden, die Sie erhalten, so dass die Pufferung nutzlos wäre.