Best practice of using Trace and Debug
class Program { static void Main(string[] args) { Trace.WriteLine("program started..."); Trace.Assert(1 != 1, "something wrong"); // MasterTraceSource.TraceInformation("Trace information"); MasterTraceSource.TraceEvent(TraceEventType.Error, 1, "Error message."); MasterTraceSource.TraceEvent(TraceEventType.Verbose, 2, "Warning message."); MasterTraceSource.Close(); return; } private static TraceSource mySource = new TraceSource("TraceSourceApp"); public static TraceSource MasterTraceSource { get { return mySource; } } }
<?xml version="1.0" encoding="utf-8" ?> <configuration> <system.diagnostics> <sources> <!-- "TraceSourceApp" is the name of TraceSource, new TraceSource("TraceSourceApp") switch name reference the name in source switch, it controls whether send the information to listners --> <source name="TraceSourceApp" switchName="sourceSwitch" switchType="System.Diagnostics.SourceSwitch"> <listeners> <add name="consoleListner" /> <add name="textfileListner"/> <remove name="Default"/> </listeners> </source> </sources> <trace autoflush="true" indentsize="4"> <listeners> <add name="consoleListner" /> <remove name="Default" /> </listeners> </trace> <switches> <add name="sourceSwitch" value="Verbose"/> </switches> <sharedlisteners> <add name="consoleListner" type="System.Diagnostics.ConsoleTraceListener"> <!--filter is optional, it controls whether to output info to underlining datasource--> <filter type="System.Diagnostics.EventTypeFilter" initializeData="Error"/> </add> <add name="textfileListner" type="System.Diagnostics.TextWriterTraceListener" initializeData="textfileListner.log"> <filter type="System.Diagnostics.EventTypeFilter" initializeData="Verbose"/> </add> </sharedListeners> </system.diagnostics> </configuration>
When you enable system.web.trace enabled ="true" requestLimit="20" writeToDiagnosticsTrace ="true " pageOutput ="false", the trace not only ouput to page or trace.axd, it will be also ouput system.diagnostic.trace listner. But it is much simpler.