C# 格式化跟踪输出
我正在使用C# 格式化跟踪输出,c#,debugging,formatting,trace,trace-listener,C#,Debugging,Formatting,Trace,Trace Listener,我正在使用TextWriterTraceListener将诊断消息记录到文本文件中。然而,我不想记录每个添加的跟踪消息的时间戳。是否可以为侦听器定义一种自动添加时间戳的格式化程序 目前,我正在为每个Trace.WriteLine()调用手动添加时间戳,但这不是很舒服。我建议您改用它,它具有更多的可定制性 或者,您可以编写自己的TraceListener实现,为您添加时间戳。您甚至可以从TextWriterTraceListener派生并重写Write和WriteLine: public over
TextWriterTraceListener
将诊断消息记录到文本文件中。然而,我不想记录每个添加的跟踪消息的时间戳。是否可以为侦听器定义一种自动添加时间戳的格式化程序
目前,我正在为每个Trace.WriteLine()
调用手动添加时间戳,但这不是很舒服。我建议您改用它,它具有更多的可定制性
或者,您可以编写自己的TraceListener
实现,为您添加时间戳。您甚至可以从TextWriterTraceListener
派生并重写Write
和WriteLine
:
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));
}
如注释中所述,这会导致
TraceInformation
的日期重复,因为这会调用Write
两次。使用“适当的”日志框架肯定更好。您可以编写自己的TextWriterTraceListener子类,它覆盖WriteLine方法,修饰行,然后将修饰后的字符串传递给基类实现以进行实际输出。这并不是问题的答案,但您是否考虑过只使用
您可以将其配置为添加时间等,以及大量其他有用的功能。考虑使用或只添加“DateTime”作为跟踪自动选项。即使这是一个旧选项,并且答案已被接受,我仍将添加一个选项。您可以使用codeplex中的插件。除其他外,它使您能够定义自定义格式,类似于您可以使用log4net和NLog定义的格式。它是一个仅限配置的依赖项。也就是说,您可以通过app.config文件配置Ukadc.Diagnostics的使用。没有源依赖项(您继续通过System.Diagnostics而不是通过特殊api进行日志记录)。尽管如此,您仍应注意一些限制:
我最近遇到了类似的情况,现在看来我们有了一个非常适合这项任务的工具,即。您可以在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>
TextWriterTraceListener
的Write
和WriteLine
方法不使用此参数编写的
,这使得它在我的情况下毫无用处。安装此参数的最简单方法是通过NuGet:Install-Package-Essential.Diagnostics.RollingFileTraceListener(注意:我是Essential.Diagnostics的维护者)也,我想我会指出“convertWriteToEvent”设置会将Write和WriteLine转换为跟踪事件,因此它们也会得到一个时间戳。(虽然使用TraceSource可能比使用跟踪上的静态方法更好。)基本诊断已从codeplex转移到github。请更新链接:这不适用于Trace.TraceInformation
,因为它首先调用Write
来写入源代码,然后调用WriteLine
来写入消息,所以日期会输出两次。@wezten:感谢您注意到这一点。我会指出,但我不认为我会尝试“修复”它现在。