2009-07-23 123 views
14

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

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

回答

15

我建议你使用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)); 
} 
1

你可以写你自己的TextWriterTraceListener会子类覆盖的WriteLine方法,装饰线,然后经过装饰串基地类实现来做实际的输出。

-1

不是一个真正的回答你的问题,但你只是用log4Net考虑?

你可以配置它来添加时间等,与其他有用的大量功能一起。

1

或者只是添加 “日期时间” 作为traceOutputOption。

+4

作为写在http://msdn.microsoft.com/en-us/library/system.diagnostics.tracelistener.traceoutputoptions.aspx此参数不使用`Write`和`的WriteLine`方法` TextWriterTraceListener`这使得它在我的情况下无效 – RaYell 2009-09-07 13:50:29

0

即使这是旧的,答案已被接受,我会扔在多一个选择。您可以使用codeplex的Ukadc.Diagnostics插件。除此之外,它使您能够定义自定义格式,类似于您可以使用log4net和NLog定义的格式。它是仅配置的依赖项。也就是说,您可以通过app.config文件配置Ukadc.Diagnostics的使用。没有源依赖关系(您继续通过System.Diagnostics登录,而不是通过特殊的API)。话虽如此,有一定的局限性,你应该知道的:

  1. 目前Ukadc.Diagnostics与TraceSources登录时实现真正的才能正常工作的格式选项。使用Trace.Write和Trace.WriteLine进行日志记录时,TraceEventCache对象未填充,这是大多数格式化对象获取其信息的地方。

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

12

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

<sharedListeners> 
    <add name="rollingfile" 
    type="Essential.Diagnostics.RollingFileTraceListener, Essential.Diagnostics" 
    initializeData="{ApplicationName}-{DateTime:yyyy-MM-dd}.log" 
    convertWriteToEvent="true" 
    template="{DateTime:yyyy-MM-dd HH:mm:ss.fff} {Message}{Data}" 
    /> 
</sharedListeners> 
+0

最简单的安装方式是通过NuGet:Install-Package Essential.Diagnostics.RollingFileTraceListener (注意:我是Essential.Diagnostics的维护者) – 2017-02-07 05:30:50