异常处理 日志类

using System;
using System.Xml;
using System.Data.SqlClient;
using System.Collections;
using System.Data;
using System.Web;
using System.IO;
using System.Web.UI;

namespace Auralog.Elisa.Logs
{
    
public static class Log
    
{
        
#region Private Fields
        
private static  XmlDocument xmlDocument = new XmlDocument();
        
private static string xmlFileName = "";
        
const string errorPath = "~/Error.aspx";
        
#endregion


        
#region Private Methods

        
//if have Exception Redirect error page
        private static void JumpToErrorPage()
        
{
            HttpContext.Current.Response.Redirect(errorPath, 
true);
        }


        
private static string FormatInt(int num)
        
{
            
string formattedString = "";
            
if (num <= 9)
            
{
                formattedString 
= "0" + num.ToString();
            }

            
else
            
{
                formattedString 
= num.ToString();
            }


            
return formattedString;
        }


        
private static string GetFileName()
        
{
            
string year = DateTime.Now.Year.ToString();
            
string month = FormatInt(DateTime.Now.Month);
            
string day = FormatInt(DateTime.Now.Day);
            
//string path = "web/Log/";
            string path = System.Web.HttpContext.Current.Server.MapPath("~/log/");

            
string file = path + "Log" + year + month + day + ".xml";
            
            
return file;
        }


        
/// <summary>
        
/// create log file path
        
/// </summary>

        private static void CreateLogFile()
        
{
            
string xmlRootElementStr = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
            xmlRootElementStr 
+= "<log>";
            xmlRootElementStr 
+= "    <System>";
            xmlRootElementStr 
+= "        <exceptions>";
            xmlRootElementStr 
+= "        </exceptions>";
            xmlRootElementStr 
+= "    </System>";
            xmlRootElementStr 
+= "    <Sql>";
            xmlRootElementStr 
+= "        <exceptions>";
            xmlRootElementStr 
+= "        </exceptions>";
            xmlRootElementStr 
+= "    </Sql>";
            xmlRootElementStr 
+= "</log>";

            xmlFileName 
= GetFileName();
            
try
            
{
                
//if file inexistence,create a new log file and load this file
                if (!System.IO.File.Exists(xmlFileName))
                
{
                    
byte[] xmlRootElementByte = System.Text.Encoding.Default.GetBytes(xmlRootElementStr);
                    System.IO.FileStream fileStream 
= new System.IO.FileStream(xmlFileName, FileMode.Create);
                    fileStream.Write(xmlRootElementByte, 
0, xmlRootElementByte.Length);
                    fileStream.Close();
                    xmlDocument.Load(xmlFileName);
                }

                
else
                
{
                    xmlDocument.Load(xmlFileName);
                }

            }

            
catch (Exception ex)
            
{
                
throw ex;
            }

        }

        
#endregion


        
#region Public Methods

        
/// <summary>
        
/// record a system exception to log
        
/// </summary>
        
/// <param name="ex"></param>

        public static void AddSystemException(Exception ex)
        
{
            
//Get 
            CreateLogFile();

            XmlNode xmlNode 
= xmlDocument.SelectSingleNode("//System//exceptions");

            XmlElement exceptionNode 
= xmlDocument.CreateElement("exception");

            XmlElement timeNode 
= xmlDocument.CreateElement("Time");

            XmlElement messageNode 
= xmlDocument.CreateElement("Message");
            XmlElement sourceNode 
= xmlDocument.CreateElement("Source");
            XmlElement stacktraceNode 
= xmlDocument.CreateElement("StackTrace");


            DateTime dateTime 
= DateTime.Now;
            
string messageString = ex.Message;
            
string sourceString = ex.Source;
            
string stacktrace = ex.StackTrace;

            timeNode.InnerText 
= dateTime.ToString();

            messageNode.InnerText 
= messageString;
            sourceNode.InnerText 
= sourceString;
            stacktraceNode.InnerText 
= stacktrace;

            exceptionNode.AppendChild(timeNode);

            exceptionNode.AppendChild(messageNode);
            exceptionNode.AppendChild(sourceNode);
            exceptionNode.AppendChild(stacktraceNode);

            xmlNode.AppendChild(exceptionNode);

            xmlDocument.Save(xmlFileName);
            JumpToErrorPage();
        }


        
// record a sql exception to log
        public static void AddSqlException(Exception ex)
        
{
            
//Get
            CreateLogFile();

            XmlNode xmlNode 
= xmlDocument.SelectSingleNode("//Sql//exceptions");

            XmlElement exceptionNode 
= xmlDocument.CreateElement("exception");

            XmlElement timeNode 
= xmlDocument.CreateElement("Time");

            XmlElement messageNode 
= xmlDocument.CreateElement("Message");
            XmlElement sourceNode 
= xmlDocument.CreateElement("Source");
            XmlElement stacktraceNode 
= xmlDocument.CreateElement("StackTrace");


            DateTime dateTime 
= DateTime.Now;
            
string messageString = ex.Message;
            
string sourceString = ex.Source;
            
string stacktrace = ex.StackTrace;

            timeNode.InnerText 
= dateTime.ToString();

            messageNode.InnerText 
= messageString;
            sourceNode.InnerText 
= sourceString;
            stacktraceNode.InnerText 
= stacktrace;

            exceptionNode.AppendChild(timeNode);

            exceptionNode.AppendChild(messageNode);
            exceptionNode.AppendChild(sourceNode);
            exceptionNode.AppendChild(stacktraceNode);

            xmlNode.AppendChild(exceptionNode);

            xmlDocument.Save(xmlFileName);
            JumpToErrorPage();
        }

        
#endregion

    }

}

原文地址:https://www.cnblogs.com/lmcblog/p/2669417.html