Exception Logger, this was implemented on one of my projects
I admit I didn't write it all, it was a training for one of my team
and they did the job well, of course, with some adjustments, it's now
fully working.
<--- Starts here --->
public class Logger
{
private static string LogFileName = @"C:\..\Logs\WFLogFile.xml";
private static string LogPath = @"C:\..\Logs";
public static void LogException(Exception ex)
{
CreateExFile();
string strFilename = LogFileName;
XmlDocument XMLDom = new XmlDocument();
XMLDom.Load(strFilename);
XmlElement parentNode = XMLDom.CreateElement("ExceptionInfo");
parentNode.SetAttribute("Exception_PageName", "");
XMLDom.DocumentElement.PrependChild(parentNode);
XmlElement DateTimeNode = XMLDom.CreateElement("DateTime");
XmlElement MessageNode = XMLDom.CreateElement("Message");
XmlElement SourceNode = XMLDom.CreateElement("Source");
XmlElement StackTraceNode = XMLDom.CreateElement("StackTrace");
XmlText DateTimeText = XMLDom.CreateTextNode(DateTime.Now.ToString());
XmlText MessageText = XMLDom.CreateTextNode(ex.Message);
XmlText SourceText = XMLDom.CreateTextNode(ex.Source);
XmlText StackTraceText = XMLDom.CreateTextNode(ex.StackTrace);
parentNode.AppendChild(DateTimeNode);
parentNode.AppendChild(MessageNode);
parentNode.AppendChild(SourceNode);
parentNode.AppendChild(StackTraceNode);
DateTimeNode.AppendChild(DateTimeText);
MessageNode.AppendChild(MessageText);
SourceNode.AppendChild(SourceText);
StackTraceNode.AppendChild(StackTraceText);
Exception exCheck = ex;
int i = 0;
if (exCheck.InnerException != null)
{
XmlElement InnerExceptionsNode = XMLDom.CreateElement("InnerExceptions");
while (exCheck.InnerException != null)
{
i = i + 1;
XmlElement InnerExceptionParentNode = XMLDom.CreateElement("InnerException" + i.ToString());
XmlElement InMessageNode = XMLDom.CreateElement("InMessage");
XmlElement InSourceNode = XMLDom.CreateElement("InSource");
XmlElement InStackTraceNode = XMLDom.CreateElement("InStackTrace");
XmlText InMessageText = XMLDom.CreateTextNode(exCheck.Message);
XmlText InSourceText = XMLDom.CreateTextNode(exCheck.Source);
XmlText InStackTraceText = XMLDom.CreateTextNode(exCheck.StackTrace);
InnerExceptionParentNode.AppendChild(InMessageNode);
InnerExceptionParentNode.AppendChild(InSourceNode);
InnerExceptionParentNode.AppendChild(InStackTraceNode);
InMessageNode.AppendChild(InMessageText);
InSourceNode.AppendChild(InSourceText);
InStackTraceNode.AppendChild(InStackTraceText);
InnerExceptionsNode.AppendChild(InnerExceptionParentNode);
parentNode.AppendChild(InnerExceptionsNode);
exCheck = exCheck.InnerException;
}
}
XMLDom.Save(strFilename);
}
public static void WriteNewExToFile(Exception ex, string PageName)
{
CreateExFile();
string strFilename = LogFileName;
XmlDocument XMLDom = new XmlDocument();
XMLDom.Load(strFilename);
XmlElement parentNode = XMLDom.CreateElement("ExceptionInfo");
parentNode.SetAttribute("Exception_PageName", PageName);
XMLDom.DocumentElement.PrependChild(parentNode);
XmlElement DateTimeNode = XMLDom.CreateElement("DateTime");
XmlElement MessageNode = XMLDom.CreateElement("Message");
XmlElement SourceNode = XMLDom.CreateElement("Source");
XmlElement StackTraceNode = XMLDom.CreateElement("StackTrace");
XmlText DateTimeText = XMLDom.CreateTextNode(DateTime.Now.ToString());
XmlText MessageText = XMLDom.CreateTextNode(ex.Message);
XmlText SourceText = XMLDom.CreateTextNode(ex.Source);
XmlText StackTraceText = XMLDom.CreateTextNode(ex.StackTrace);
parentNode.AppendChild(DateTimeNode);
parentNode.AppendChild(MessageNode);
parentNode.AppendChild(SourceNode);
parentNode.AppendChild(StackTraceNode);
DateTimeNode.AppendChild(DateTimeText);
MessageNode.AppendChild(MessageText);
SourceNode.AppendChild(SourceText);
StackTraceNode.AppendChild(StackTraceText);
Exception exCheck = ex;
int i = 0;
if (exCheck.InnerException != null)
{
XmlElement InnerExceptionsNode = XMLDom.CreateElement("InnerExceptions");
while (exCheck.InnerException != null)
{
i = i + 1;
XmlElement InnerExceptionParentNode = XMLDom.CreateElement("InnerException" + i.ToString());
XmlElement InMessageNode = XMLDom.CreateElement("InMessage");
XmlElement InSourceNode = XMLDom.CreateElement("InSource");
XmlElement InStackTraceNode = XMLDom.CreateElement("InStackTrace");
XmlText InMessageText = XMLDom.CreateTextNode(exCheck.Message);
XmlText InSourceText = XMLDom.CreateTextNode(exCheck.Source);
XmlText InStackTraceText = XMLDom.CreateTextNode(exCheck.StackTrace);
InnerExceptionParentNode.AppendChild(InMessageNode);
InnerExceptionParentNode.AppendChild(InSourceNode);
InnerExceptionParentNode.AppendChild(InStackTraceNode);
InMessageNode.AppendChild(InMessageText);
InSourceNode.AppendChild(InSourceText);
InStackTraceNode.AppendChild(InStackTraceText);
InnerExceptionsNode.AppendChild(InnerExceptionParentNode);
parentNode.AppendChild(InnerExceptionsNode);
exCheck = exCheck.InnerException;
}
}
XMLDom.Save(strFilename);
}
private static void CreateExFile()
{
string strFilename = LogFileName;
bool AddDate = (LogFileName.Contains("WFLogFile.xml"));
if (!File.Exists(strFilename))
{
if (!System.IO.Directory.Exists(LogPath ))
System.IO.Directory.CreateDirectory(LogPath );
if (AddDate)
{
DateTime dt = DateTime.Now;
strFilename = strFilename.Replace(".xml", dt.Day.ToString("00") + "-" + dt.Month.ToString("00") + "-" + dt.Year.ToString("0000") + ".xml");
LogFileName = strFilename;
}
XmlTextWriter newXmlFile = new XmlTextWriter(strFilename, System.Text.Encoding.Default);
newXmlFile.WriteStartDocument(true);
newXmlFile.WriteStartElement("ExceptionErrors");
newXmlFile.WriteEndElement();
newXmlFile.Flush();
newXmlFile.Close();
}
}
}
<--- Ends here --->
MAG