C#从Code behind和chage initializeData值访问侦听器TextWriterTraceListener对象

时间:2012-04-11 05:34:47

标签: logging trace system.diagnostics

我在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>

我的要求是,从后面的代码访问监听器对象并动态更改日志文件名(initializeData),这样我每天都可以有单独的日志文件。

我已经尝试了一些示例代码,如下所示,从后面的代码更改日志文件名,但它不起作用。

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

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

所有已配置的跟踪侦听器都是在启动时创建的,您无法在运行时更改文件名。相反,您必须删除它们,在运行时创建和添加它们,如下所示。

//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"));

我希望这会有所帮助。