格式化跟踪输出

我正在使用TextWriterTraceListener将诊断消息记录到文本文件中。 但是,我也不想记录添加的每条跟踪消息的时间戳。 是否可以为侦听器定义一种自动添加时间戳的格式化程序?

目前我正在每次Trace.WriteLine()调用时手动添加时间戳,但这不是很舒服。

我建议您使用Log4Net ,它具有更多的可定制性。

或者,您可以编写自己的TraceListener实现,为您设置时间戳。 您甚至可以从TextWriterTraceListener派生并覆盖WriteWriteLine

 public override void Write(string x) { // Use whatever format you want here... base.Write(string.Format("{0:r}: {1}", DateTime.UtcNow, x)); } public override void WriteLine(string x) { // Use whatever format you want here... base.WriteLine(string.Format("{0:r}: {1}", DateTime.UtcNow, x)); } 

我最近遇到过类似的情况,看起来我们现在有一个非常适合这项任务的工具,即Essential Diagnostics 。 您在app.config中设置了一个侦听器,如下面的代码所示,然后将Essential.Diagnostics.dll放入同一个文件夹中。 不需要重新调整。 即使您不拥有源,也可以将此用于使用System.Diagnostics进行跟踪的任何应用程序。 那不是很奇妙吗?

    

您可以编写自己的TextWriterTraceListener子类来覆盖WriteLine方法,修饰该行,然后将修饰后的字符串传递给基类实现来执行实际输出。

或者只是将“DateTime”添加为traceOutputOption。

不是你的问题的答案,但你考虑过只使用log4Net ?

您可以将其配置为添加时间等,以及大量其他有用的function。

考虑使用Logging Application Block

即使这已经过时并且已经接受了答案,我还会再提出一个选择。 您可以使用codeplex中的Ukadc.Diagnostics插件。 除此之外,它还允许您定义自定义格式,类似于您可以使用log4net和NLog定义的格式。 它是仅配置依赖项。 也就是说,您通过app.config文件配置Ukadc.Diagnostics的使用。 没有源依赖项(您继续通过System.Diagnostics记录,而不是通过特殊的API)。 话虽如此,您应该注意一些限制:

  1. 当使用TraceSources进行日志记录时,当前在Ukadc.Diagnostics中实现的格式化选项实际上只能正常工作。 使用Trace.Write和Trace.WriteLine进行日志记录时,未填充TraceEventCache对象,这是大多数格式化对象获取其信息的位置。

  2. 必须使用Ukadc.Diagnostics TraceListener(或从Ukadc.Diagnostics基础TraceListener派生的自定义侦听器)才能使自定义格式显示在输出中。 如果您找到了一个新的超级duper滚动文件TraceListener,则必须完成一些工作才能将它与Ukadc.Diagnostics格式结合使用。 这可能与根据Ukadc.Diagnostics基础TraceListener重新实现侦听器一样困难。 或者它可能更容易,如果您可以创建一个新的基于Ukadc.Diagnostics的TraceListener,它包含超级滚动TraceListener,格式化每个Ukadc.Diagnostics的消息,然后委托给包含的侦听器的Write / WriteLine方法。