2012-02-07 48 views
5

我使用System.Diagnostics.TraceSource进行日志记录,我的一个侦听器是TextWriterTraceListener。在跟踪底漆here它设置这件事如下:如何阻止TextWriterTraceListener使用app.config追加?

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

的问题是,这将始终添加到output.txt。你如何改变这个配置文件覆盖?

编程我想听众是:

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

回答

2

最简单的解决方案就是制作你自己的。

我建议你继承TextWriterTraceListener,并在你的构造函数中设置基地Writer为你所建议的:new StreamWriter("output.txt", false)

一些示例代码:

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

这可以让你把initializeData参数从配置文件中指定的文件名,或者如果在代码中创建指定一个。

+0

我喜欢这个想法,但是当在App.config中输入type = MyNamespace.MyTextWriterTraceListener时,程序崩溃。 – 2014-03-06 22:36:25

+0

有趣。我前几天做了一个类似的自定义监听器,没有任何问题。我必须添加到我的app.config中的一点是'type =“MyNamespace.MyTextWriterTraceListener,AssemblyNameContainingListener”'。还要确保包含它的程序集正在被复制,我有一个单元测试,它在app.config中引用它,但在代码中没有引用,所以Visual Studio有足够的帮助,不会将其复制到本地。 – 2014-03-07 16:25:45

+0

谢谢,我正在离开程序集名称。 – 2014-03-10 02:53:18

1

我知道这并不直接回答你的问题,但使用NLog代替。它在日志记录选项方面比现成的诊断功能做得更多,而且它非常易于使用。

+3

-1根本不回答问题。 OP没有要求替代日志解决方案,而是如何配置所选的日志解决方案。 – 2014-03-06 17:42:14

+1

@JonPeterson我不同意。有一个合理的机会,这个答案对别人有帮助。 – Holf 2016-12-22 12:42:14

0

更简单,只是告诉TestWriterTraceListener不追加文件:

TextWriterTraceListener twtl = new TextWriterTraceListener(new StreamWriter(@"<path to my logfile>", false)); 

通过选择false日志文件每次初始化TextWriterTraceListener会时被覆盖。

+0

谢谢,但我一直在寻找一种解决方案,允许在配置中指定编写器。你的解决方案在问题的底部,因为我想复制的行为:) – 2014-10-23 09:38:29