2012-11-06 8 views
10

mam skonfigurowane log4net z RollingLogFileAppender i SmtpAppender, z zamiarem zalogowaniu poziom debugowania do RollingLogFileAppender i śmiertelną tylko do SmtpAppender:log4net LevelEvaluator ignorowane podczas BUFFERSIZE większy niż 1 dla 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> 

ten działa idealnie, dopóki nie zwiększę rozmiaru bufora. Kiedy to zrobię, wszystkie poziomy są wysyłane pocztą e-mail, a log4net.Core.LevelEvaluator wydaje się być ignorowany. Próbowałem również przy użyciu LevelRangeFilter i LevelMatchFilter, ale przy tych skonfigurowanych wydaje się, że w ogóle nie otrzymuję wiadomości e-mail.

Odpowiedz

10

Ewaluator nie jest ignorowany, ale nie robi tego, czego się spodziewasz: Twoje ustawienia nakazują aplikantowi umieszczenie wszystkich komunikatów dziennika na buforze i wysłanie e-maila tylko wtedy, gdy jest zalogowany log z poziomem FATAL. Jeśli bufor jest pełny, najstarsze wiadomości są odrzucane (to jest ustawienie stratne, bez niego można również otrzymać wiadomość e-mail, gdy tylko bufor zostanie zapełniony).

Jeśli chcesz filtrować wiadomości, musisz użyć filtra. Na przykład takich jak to:

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

Nie jestem pewien, ale jeśli uważam moją pocztę appender tak, ponieważ chciałbym, aby otrzymywać powiadomienia natychmiast, jeśli moja aplikacja ma wątpliwości, że musi zalogować się z poziomu śmiertelne.

+0

Dzięki Stefan, nie doceniam, że nie otrzymałem wszystkich logów, dopóki nie wygenerowano FATAL. Teraz rozumiem, że ta konfiguracja faktycznie działa dobrze dla mnie! Jeszcze raz dziękuję za odpowiedź. –

Powiązane problemy