.net捕获全局异常并且记录日志多线程方式发送邮件提醒

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net捕获全局异常并且记录日志多线程方式发送邮件提醒相关的知识,希望对你有一定的参考价值。

在软件、网站中难免会出现种种异常,如果你的项目中有未处理的异常并且不想一处处的加异常那么可以借鉴下一下这个方案

1.新建一个全局应用文件Global.asax此文件在统计在线人数的时候应用较多

2.此文件中有个Application_Error方法此方案就是用的这个方法,加入以下捕获异常的代码

技术分享
 1 //在出现未处理的错误时运行的代码
2 Exception ex = Server.GetLastError();
3 StringBuilder sb = new StringBuilder();
4 string dt = DateTime.Now.ToString();
5 sb.Append("------\\r\\n").Append(dt).Append("\\r\\n内部错误:").Append(ex.InnerException.ToString())
6 .Append("\\r\\n堆栈:").Append(ex.StackTrace).Append("\\r\\n内容:").Append(ex.Message)
7 .Append("\\r\\n来源:").Append(ex.Source).Append("\\r\\n");
8 Log.SetLog(sb.ToString());
9 Server.ClearError();
10 Server.Transfer("error.aspx", false);
技术分享

3.新建个记录日志并且自动发送邮件提醒的类

技术分享
 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Web;
5 using System.IO;
6 using System.Threading;
7 /// <summary>
8 ///Log 的摘要说明
9 /// </summary>
10 public class Log
11 {
12 public Log()
13 {
14 //
15 //TODO: 在此处添加构造函数逻辑
16 //
17 }
18 private string logBody;
19 public string LogBody
20 {
21 get { return logBody; }
22 set { logBody = value; }
23 }
24 public static void SetLog(string str)
25 {
26 string path = HttpContext.Current.Server.MapPath("log.log");
27 File.AppendAllText(path, str);
28 //Thread.Sleep(1000);
29 Log log1 = new Log();
30 log1.LogBody = str;
31 Thread t = new Thread(new ThreadStart(log1.SendEmail));
32 t.IsBackground = true;
33 t.Start();
34 }
35
36 private void SendEmail()
37 {
38 System.Net.Mail.SmtpClient client = new System.Net.Mail.SmtpClient();
39 client.Host = "---";
40 client.UseDefaultCredentials = false;
41 client.Credentials = new System.Net.NetworkCredential("---", "---");
42 client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network;
43 client.Timeout = 9000;
44 System.Net.Mail.MailMessage message = new System.Net.Mail.MailMessage("---", "---");
45 message.Subject = "---";
46 message.Body = logBody;
47 message.BodyEncoding = System.Text.Encoding.UTF8;
48 message.IsBodyhtml = true;
49
50 try
51 {
52 client.Send(message);
53
54 }
55 catch(Exception ex)
56 {
57 }
58 }
59 }
技术分享

其中---按需求自行填写

4.新建个error.aspx文件用于捕获异常后转向的提示页面

以上是关于.net捕获全局异常并且记录日志多线程方式发送邮件提醒的主要内容,如果未能解决你的问题,请参考以下文章

Android 捕获全局异常CrashHandler,防止异常闪退,记录异常日志

自定义全局异常捕获

MVC如何使用Log4Net进行错误日志记录

WPF全局异常捕获

[系列] go-gin-api 路由中间件 - 捕获异常

springboot捕获全局异常和配置多数据源