C# 发生错误时发送电子邮件

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10384920/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-09 13:37:52  来源:igfitidea点击:

Send an Email When an Error Occurs

c#emaillog4net

提问by swade1987

Currently my application is using log4net to log errors, the web.config for this is as followed:

目前我的应用程序正在使用 log4net 来记录错误,为此的 web.config 如下:

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

However, the client now wants each error to be emailled to them.

但是,客户现在希望通过电子邮件将每个错误发送给他们。

What is the easiest way to do this, can you do it within the web.config file?

执行此操作的最简单方法是什么,您可以在 web.config 文件中执行此操作吗?

采纳答案by Claudio Redi

You should use SmtpAppender

你应该使用 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>

In order to send emails only for an specific error you could do something like this

为了仅针对特定错误发送电子邮件,您可以执行以下操作

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); 
}