2012-04-30 24 views
25

Obecnie moja aplikacja używa log4net do dziennika błędów, web.config jest to, jak następuje:Wyślij Email Gdy wystąpi błąd

<log4net> 
    <appender name="FileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file type="log4net.Util.PatternString" value="../../logs/gateway_%date{yyyyMMdd}.log" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Date" /> 
     <datePattern value="yyyyMMdd" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] – %message%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="RollingLogFileAppenderOutput" /> 
    </root> 
    </log4net> 

Jednakże klient chce teraz każdy błąd należy do nich emailled .

Jaki jest najprostszy sposób, aby to zrobić, możesz to zrobić w pliku web.config?

Odpowiedz

40

Należy użyć SmtpAppender

<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender"> 
    <to value="[email protected]" /> 
    <from value="[email protected]" /> 
    <subject value="test logging message" /> 
    <smtpHost value="SMTPServer.domain.com" /> 
    <bufferSize value="512" /> 
    <lossy value="true" /> 
    <evaluator type="log4net.Core.LevelEvaluator"> 
     <threshold value="WARN"/> 
    </evaluator> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%newline%date [%thread] %-5level %logger [%property{NDC}] - %message%newline%newline%newline" /> 
    </layout> 
</appender> 

<logger name="ErrorLogger"> 
    <level value="Error" /> 
    <appender-ref ref="FileAppender" /> 
</logger> 
<logger name="EmailLogger"> 
    <level value="Error" /> 
    <appender-ref ref="SmtpAppender" /> 
</logger> 

Aby wysłać tylko e-maile dla konkretnego błędu można zrobić coś takiego

try 
{ 
    // your logic 
} 
catch (MySpecificException ex) 
{ 
    // I only send emails for exception of type MySpecificException 
    LogManager.GetLogger("EmailLogger").Error(ex); 
} 
catch (Exception ex) 
{ 
    // Just log to a file for the rest 
    LogManager.GetLogger("ErrorLogger").Error(ex); 
} 
+0

będzie trzeba także mieć dostęp do serwera SMTP, jeśli nie masz jednego jest kilka dobrych dostępnych w Internecie, wystarczy zrobić wyszukiwanie google – pengibot

+0

jednak oznacza to, że "każda" wiadomość jest wysyłana poprawnie? Czy jest to sposób na wysyłanie tylko "pewnych" błędów? – swade1987

+0

@ swade1987: w tej konfiguracji nie wysyłasz wszystkich błędów automatycznie, musisz dodać linię kodu do zalogowania. Ponieważ musisz ręcznie rejestrować błędy, możesz zdecydować, które błędy należy rejestrować, a które nie. –

Powiązane problemy