Sunday, August 16, 2009

Monitoring applications thru Trace Listners

What is Trace?
Trace provides an efficient logging and monitoring capabilities. Trace listners can used to write logs on console, text file or debugger output window.

Difference between Debug and Trace
Debug is used to write output in debug mode. Debug's write method will not work in release mode of application. Apart from it Trace works on both Debug as well Release mode of application.

Trace Listners
Trace Listners provide a mechanism for collecting and recording message that are sent. These messages are received by listners. The purpose of a listener is to collect, store, and route tracing messages.

Listner Types
  • A TextWriterTraceListener redirects output to an instance of the TextWriter class or to anything that is a Stream class. It can also write to the console or to a file, because these are Stream classes.
  • An EventLogTraceListener redirects output to an event log.
  • A DefaultTraceListener redirects output to an output window (VS.NET editor output window). This behavior is the default behavior for Debug and Trace messages, because DefaultTraceListener is automatically included in every Listeners collection and is the only listener automatically included.
  • A ConsoleTraceListener directs tracing or debugging output to either the standard output or the standard error stream.
  • A DelimitedListTraceListener directs tracing or debugging output to a text writer, such as a stream writer, or to a stream, such as a file stream. The trace output is in a delimited text format that uses the delimiter specified by the Delimiter property.
  • An XmlWriterTraceListener directs tracing or debugging output as XML-encoded data to a TextWriter or to a Stream, such as a FileStream .
An example using TextWriterTraceListener

Class: CustomTraceLog.CS

using System;
using System.Collections.Generic;
using System.Text;
using System.Diagnostics;
using System.Collections;
namespace CustomTraceLog
{
public sealed class CMTrace
{
public static void Path(string FileLocation)
{
string FileName = DateTime.Now.ToString("MMddyyyy") + ".txt";
string QualifiedPath=System.IO.Path.Combine(FileLocation, FileName);
Trace.Listeners.Clear();
Trace.Listeners.Add(new System.Diagnostics.TextWriterTraceListener(QualifiedPath));
}
public static void Close()
{
Trace.Close();
}
public static void Fail(string message)
{
Trace.Fail(message);
}
public static void Flush()
{
Trace.Flush();
}
public static void Indent()
{
Trace.Indent();
}
public static void Refresh()
{
Trace.Refresh();
}
public static void Unindent()
{
Trace.Unindent();
}
public static void Write(object value)
{
Trace.Write(value);
}
public static void Write(string message)
{
Trace.Write(message);
}
public static void Write(object value, string category)
{
Trace.Write(value,category);
}
public static void Write(string message, string category)
{
Trace.Write(message,category);
}
public static void WriteIf(bool condition, object value)
{
Trace.WriteIf(condition,value);
}
public static void WriteIf(bool condition, string message)
{
Trace.WriteIf(condition,message);
}
public static void WriteIf(bool condition, object value, string category)
{
Trace.WriteIf(condition,value,category);
}
public static void WriteIf(bool condition, string message, string category)
{
Trace.WriteIf(condition, message, category);
}
public static void WriteLine(object value)
{
Trace.WriteLine(value);
}
public static void WriteLine(string message)
{
Trace.WriteLine(message);
}
public static void WriteLine(object value, string category)
{
Trace.WriteLine(value,category);
}
public static void WriteLine(string message, string category)
{
Trace.WriteLine(message,category);
}
public static void WriteLineIf(bool condition, object value)
{
Trace.WriteLineIf(condition,value);
}
public static void WriteLineIf(bool condition, string message)
{
Trace.WriteLineIf(condition,message);
}
public static void WriteLineIf(bool condition, object value, string category)
{
Trace.WriteLineIf(condition,value,category );
}
public static void WriteLineIf(bool condition, string message, string category)
{
Trace.WriteLineIf(condition,message ,category );
}
public static void WriteException(Exception e)
{
StringBuilder sb = new StringBuilder();
sb.Append("***************** BEGIN EXCEPTION *****************");
sb.Append("Message: " + e.Message.ToString());
sb.Append("Stack Trace: " + e.StackTrace.ToString());
sb.Append("Source: " + e.Source.ToString());
IEnumerator Ie= e.Data.GetEnumerator();
while (Ie.MoveNext())
{
sb.Append("Data: " + e.Data[Ie.Current].ToString());
}
sb.Append("***************** END EXCEPTION *****************");
WriteLine(sb.ToString());
Flush();
Close();
}
public static void WriteLog(string strMessage)
{
StringBuilder sb = new StringBuilder();
sb.Append("***************** BEGIN LOG *****************");
sb.Append("Message: " + strMessage);
sb.Append("Time: " + DateTime.Now);
sb.Append("***************** END EXCEPTION *****************");
WriteLine(sb.ToString());
Flush();
Close();
}
}
}


Console Application: Program.CS

static void Main(string[] args)
{
int i = 10;
int j = 0;
CustomTraceLog.CMTrace.Path(@"C:\temp\");
CustomTraceLog.CMTrace.WriteLog("Application will now throw a zero divide exception");
try
{
int result = i / j;
}
catch (Exception ex)
{
CustomTraceLog.CMTrace.WriteException(ex);
}

}

Output Log File: C:\Temp\08162009.txt

***************** BEGIN LOG *****************
Message: Application will now throw a zero divide exception
Time: 16-08-2009 16:24:45
***************** END EXCEPTION *****************
***************** BEGIN EXCEPTION *****************

Message: Attempted to divide by zero.
Stack Trace: at ConsoleApplication1.Program.Main(String[] args) in C:\Users\Abhishek\Desktop\CM-TraceLog\ConsoleApplication1\Program.cs:line 17
Source: ConsoleApplication1
***************** END EXCEPTION *****************

No comments:

Post a Comment