• .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文件用于捕获异常后转向的提示页面

  • 相关阅读:
    final有什么用?
    数组的定义
    作业
    List 、Set数据结构
    报表工具实现单据套打
    动态格报表的制作
    图形钻取
    报表工具轻松搞定卡片式报表
    列表钻取
    报表中如何实现不规则布局
  • 原文地址:https://www.cnblogs.com/wlitsoft/p/2415473.html
Copyright © 2020-2023  润新知