Search code examples
c#loggingapp-configtracesource

How do you stop a TextWriterTraceListener from appending using app.config?


I'm using System.Diagnostics.TraceSource for logging and one of my listeners is a TextWriterTraceListener. In the tracing primer here it sets this up as follows:

<listeners>
  <add initializeData="output.txt" 
       type="System.Diagnostics.TextWriterTraceListener"
       name="myLocalListener" />
</listeners>

The problem is that this will always append to output.txt. How do you alter this to an overwrite in the config file?

Programmatically the listener I want is a:

new TextWriterTraceListener(new StreamWriter("output.txt", false));

Solution

  • The simplest solution is to make your own.

    I suggest that you inherit from TextWriterTraceListener and in your constructor set the base Writer to what you proposed: new StreamWriter("output.txt", false).

    Some sample code:

    public class MyTextWriterTraceListener : TextWriterTraceListener
    {
        public MyTextWriterTraceListener(string logFileName)
            : base(logFileName)
        {
            base.Writer = new StreamWriter(logFileName, false);
        }
    }
    

    This lets you take the initializeData parameter from a configuration file to specify the name of the file, or specify one if created in code.