3

I have the following listener in app.config:

<system.diagnostics>
    <trace autoflush="true" indentsize="4">
        <listeners>
            <add name="myListener" 
                 type="System.Diagnostics.TextWriterTraceListener"
                 initializeData="myAppLog.log"/>
            <remove name="Default"/>
        </listeners>
    </trace>
</system.diagnostics>

My requirement is that, access the listener object from code behind and change the logfile name(initializeData) dynamically, so that i can have seperate log file everyday.

I have tried some sample code like the below to change the logfile name from code behind, but it's not working.

foreach (TraceListener listener in System.Diagnostics.Trace.Listeners)
{
    listener.Attributes.Remove("initializeData");    
    listener.Attributes.Add("initializeData", "mylog.log");
}

Any suggestions?

Pat Hermens
  • 906
  • 6
  • 19
WKV
  • 51
  • 4

1 Answers1

4

All the configured trace listeners are created at startup, you can't change the file name at run-time. Instead you have to remove them, create and add them at run-time as below.

//Remove all existing trace listeners
while (System.Diagnostics.Trace.Listeners.Count > 0)
    System.Diagnostics.Trace.Listeners.RemoveAt(0);

//Add the new one with new file
System.Diagnostics.Trace.Listeners.Add(new TextWriterTraceListener(@"mylog.log"));

I hope this helps.

Cinchoo
  • 6,088
  • 2
  • 19
  • 34