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