我使用TextWriterTraceListener
记录诊断信息到一个文本文件中。 但我wan't也记录添加每一丝消息的时间戳。 是否有可能定义一种格式化的用于将自动添加时间戳听众?
目前,我添加时间戳每个手动Trace.WriteLine()
调用,但这不是很舒服。
我使用TextWriterTraceListener
记录诊断信息到一个文本文件中。 但我wan't也记录添加每一丝消息的时间戳。 是否有可能定义一种格式化的用于将自动添加时间戳听众?
目前,我添加时间戳每个手动Trace.WriteLine()
调用,但这不是很舒服。
我建议你使用log4net的代替,里面有很多更多的可定制性。
另外,您可以编写自己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));
}
我最近遇到类似的情况,它看起来像现在我们有一个工具非常适合的任务,即基本诊断 。 你设立的app.config一个听众像下面的代码,然后只需将Essential.Diagnostics.dll
到同一个文件夹中。 NO重新编译是必需的。 你可以使用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会子类覆盖的WriteLine方法,装饰线,然后经过装饰的字符串基类实现做实际输出。
或者只是添加“日期时间”作为traceOutputOption。
不是一个真正的回答你的问题,但你只用考虑log4net的 ?
你可以配置它来添加时间等,与其他有用的大量功能一起。
考虑使用日志记录应用程序块
虽然这是老的答案已经被接受,我会扔在多一个选择。 您可以使用Ukadc.Diagnostics CodePlex从插件。 除此之外,它使您能够定义自定义格式,类似于你可以用log4net的和NLOG定义格式。 它仅配置依赖。 也就是说,你通过app.config文件配置使用Ukadc.Diagnostics的。 有没有源的依赖关系(你继续通过System.Diagnostics程序不是通过特殊的API登录)。 话虽如此,有一定的局限性,你应该知道的:
目前在Ukadc.Diagnostics实施的格式化选项真的只用TraceSources登录时正常工作。 当与Trace.Write和Trace.WriteLine记录的TraceEventCache对象不填写,这是大多数格式化对象的获取他们的信息。
您必须使用Ukadc.Diagnostics TraceListener的(或从Ukadc.Diagnostics基地的TraceListener派生的自定义监听器),以获得自定义格式出现在你的输出。 如果你发现了一个新的超级骗子滚动文件TraceListener的,你必须做一些工作,结合Ukadc.Diagnostics格式使用它。 这可能是因为在Ukadc.Diagnostics基地的TraceListener方面重新实现监听器一样困难。 或者,它可能会更容易,如果你能创建一个包含超级骗子滚TraceListener的一个新的基于Ukadc.Diagnostics TraceListener的,格式化每Ukadc.Diagnostics消息,然后委托给包含的听者的写/的WriteLine方法。