錯誤日誌記錄和郵件提醒的功能

最近需要一個錯誤日誌記錄和郵件提醒的功能,不願意自己寫,在網上直接找了下面的代碼改了點,蠻好用的!

This article presents a way to log and mail the errors from any web page.

It logs following details -

  • Control on which the error is raised
  • Page which controls the error
  • Error Description
  • Trace Messages
  • Server and Client details

Log is created in log folder under root directory.


Source code is provided in class file errorHandler.cs



using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Net.Mail;
using System.IO;


/// <summary>
/// this class is designed to log errors and send mails regarding
/// runtime errors in myweb portal.
///
/// Developer : [email protected]
/// Date: 24-04-2008
/// Modified on: 25-04-2008
/// </summary>

public enum MessageType // enum is accessed to provide the operation to be done
{
    EventLog,
    SendMail,
    MailAndEventLog
}


public class errorHandler
{
    public MessageType MsgType
    {
        get
        {
            return this.MT;
        }
        set
        {
            this.MT = value;
        }
    }

    public MessageType MT = new MessageType();
  
    public string EmailReciever = "";
    public string LogName = "";
    public string MailServer = "";
    public string MailSubject = "Error Report " + HttpContext.Current.Request.ServerVariables["SERVER_NAME"];
    

    public errorHandler() // sets default values of the fields
    {
        this.MailServer = ConfigurationSettings.AppSettings["MailServer"];
        this.EmailReciever = ConfigurationSettings.AppSettings["MailReciever"];
        this.LogName = ConfigurationSettings.AppSettings["LogName"];
    }

    /// <summary>
    /// function errorHandler overloaded.
    /// sets the default values if provided by the user.
    /// </summary>
    /// <param name="_mailserver"> SMTP server IP </param>
    /// <param name="_mailreciever"> E mail id of person who is supposed to recieve error mails </param>
    /// <param name="_logname"> name of the error log </param>
  
    public errorHandler(string _mailserver, string _mailreciever, string _logname)
    {
        this.MailServer        = _mailserver;
        this.EmailReciever    = _mailreciever;
        this.LogName        = _logname;
    }

    /// <summary>
    /// raiseError is called to select the operation to be done
    /// </summary>
    /// <param name="_message"> any message </param>
    /// <param name="ex"> exception  </param>
    public void RaiseError(string _message, Exception ex)
    {
       switch (this.MT)
        {
            case MessageType.EventLog:
                SaveToEventLog(_message, ex);
                break;
            case MessageType.SendMail:
                sendErrorMail(_message);
                break;
            case MessageType.MailAndEventLog:
                SaveToEventLog(_message, ex);
                sendErrorMail(_message);
                break;
            default:
                break;
        }
    }

    /// <summary>
    /// Sends mail to the person specified to recieve mails
    /// </summary>
    /// <param name="_message"> message to send </param>
    /// <returns> </returns>
    public int sendErrorMail(string _message)
    {
        MailMessage errorMessage = new MailMessage();
        errorMessage.To.Add(new MailAddress(this.EmailReciever));
        errorMessage.Subject = this.MailSubject;
        errorMessage.IsBodyHtml = true;
        errorMessage.Priority = MailPriority.High;
        errorMessage.Body = _message + " Please check log for more information.";
        SmtpClient clientSmtp = new SmtpClient();
        try
        {
            clientSmtp.Send(errorMessage);
        }
        catch
        {
            return 0;
        }
        return 1;
    }


    /// <summary>
    /// Formats and logs error
    /// </summary>
    /// <param name="_message"> any message </param>
    /// <param name="ex"> exception  </param>
  
    private void SaveToEventLog(string _message, Exception ex)
    {
        try
        {
            string strPhysicalApplicationPath = HttpContext.Current.Request.PhysicalApplicationPath;
            string strFileName = strPhysicalApplicationPath + "Logs//" + LogName + DateTime.Now.ToString("ddMMMyyyy") + ".txt";
            string strBody = string.Empty;
            FileInfo fInfo = new FileInfo(strFileName);

            strBody = _message + Environment.NewLine + Environment.NewLine;
            strBody +=  "Server Address :: " + HttpContext.Current.Request.ServerVariables["SERVER_NAME"] + Environment.NewLine;
            strBody += "User Address   :: " + HttpContext.Current.Request.ServerVariables["REMOTE_HOST"] + Environment.NewLine;
            strBody += "Script Name    :: " + HttpContext.Current.Request.ServerVariables["SCRIPT_NAME"] + Environment.NewLine;
            strBody += "Query Data     :: " + HttpContext.Current.Request.Url.Query + Environment.NewLine;
            strBody += "Occured At     :: " + DateTime.Now + Environment.NewLine + Environment.NewLine;
            strBody += "################################## -- Start of Error  -- #################################" + Environment.NewLine;
            strBody += ex.StackTrace + Environment.NewLine;
            strBody += "################################### -- End of Error -- ###################################" + Environment.NewLine + Environment.NewLine;
            strBody += HttpContext.Current.Request.ServerVariables["ALL_HTTP"] + Environment.NewLine;

            DirectoryInfo dInfo = new DirectoryInfo(strPhysicalApplicationPath + "Logs//");
            if (!dInfo.Exists)
            {
                dInfo.Create();
            }

            if (fInfo.Exists)
            {
                FileStream fStream = new FileStream(strFileName, FileMode.Append, FileAccess.Write);
                StreamWriter sWriter = new StreamWriter(fStream);
                sWriter.WriteLine(strBody);
                sWriter.Close();
            }
            else
            {
                FileStream fStream = new FileStream(strFileName, FileMode.Create, FileAccess.Write);
                StreamWriter sWriter = new StreamWriter(fStream);
                sWriter.WriteLine(strBody);
                sWriter.Close();
            }
        }
        catch (Exception e)
        {
            sendErrorMail(e.Message);
        }
    }
}


Web config serrings -  

 <appSettings>
        <add key="MailServer" value="127.0.0.1"/>
        <add key="MailReciever" value="[email protected]"/>
        <add key="LogName" value="EmpostErrLog"/>
    </appSettings>
    <system.net>
        <mailSettings>
            <smtp from="[email protected]">
                <network host="127.0.0.1"/>
            </smtp>
        </mailSettings>
    </system.net>

 


Calling the method -

 catch(Exception ex)
        {
            string strMsg = "Date : " + DateTime.Now.ToString("dd/MMM/yyyy HH:mm:ss") + "  Error : " + ex.Message + " Control : " + ((Control)sender).ClientID.ToString() + " Page :  " + Page;
            errorHandler objErrorHandler = new errorHandler();
            objErrorHandler.MsgType = MessageType.MailAndEventLog;
            objErrorHandler.RaiseError(strMsg,ex);
        }

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章