As far as I can see, there are two ways to create trace messages in .NET.
The static methods of System.Diagnostics.Trace:
Trace.WriteLine("Something happened");
The instance methods of System.Diagnostics.TraceSource:
var ts = new TraceSource("TraceTest");
ts.TraceInformation("Something happened");
In my app.config file, I can either add a trace listener for everything:
<system.diagnostics>
<trace>
<listeners>
...
</listeners>
</trace>
</system.diagnostics>
or for one particular trace source:
<system.diagnostics>
<sources>
<source name="...">
<listeners>
...
</listeners>
</source>
</sources>
</system.diagnostics>
My question
If I use the first method (static methods of System.Diagnostics.Trace), which trace source name is used?
I've checked the MSDN page of System.Diagnostics.Trace, but did not find the answer there.
I checked the source of Trace.Writeline with JustDecompile and it enums all listeners and sends the message to all:
foreach (TraceListener listener in TraceInternal.Listeners)
{
if (listener.IsThreadSafe)
{
listener.WriteLine(message);
if (!TraceInternal.AutoFlush)
{
continue;
}
listener.Flush();
}
else
{
lock (listener)
{
listener.WriteLine(message);
if (TraceInternal.AutoFlush)
{
listener.Flush();
}
}
}
}
But forget this ugly Trace calls, use ETW Eventsource for a much better tracing/logging
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With