2012-04-30 36 views
25

Hiện nay ứng dụng của tôi đang sử dụng log4net để đăng nhập lỗi, web.config cho điều này là như sau:Gửi Email khi lỗi xảy ra

<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> 

Tuy nhiên, khách hàng bây giờ muốn mỗi lỗi được emailled với họ .

Cách dễ nhất để thực hiện việc này là gì, bạn có thể làm điều đó trong tệp web.config không?

Trả lời

40

Bạn nên sử dụng 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> 

Để gửi email chỉ dành cho một lỗi cụ thể mà bạn có thể làm một cái gì đó như thế này

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ạn cũng sẽ cần phải có quyền truy cập vào một máy chủ smtp, nếu bạn không có một vài cái tốt có sẵn trực tuyến, chỉ cần thực hiện tìm kiếm google – pengibot

+0

tuy nhiên, điều này có nghĩa là thông báo 'mọi' được gửi chính xác? Đó có phải là cách để chỉ gửi các lỗi 'nhất định' qua email không? – swade1987

+0

@ swade1987: với cấu hình này, bạn sẽ không tự động gửi tất cả các lỗi, bạn sẽ phải thêm một dòng mã để ghi nhật ký. Vì bạn phải ghi nhật ký lỗi theo cách thủ công, bạn có thể quyết định lỗi nào cần ghi và lỗi nào. –

Các vấn đề liên quan