d7s*_*rai 8 .net logging trace listener output-formatting
我有一个TraceSource对象,我用它来记录VB.Net应用程序的初始化.它附加了几个TraceListeners:
对于前两个,我希望输入输出为"原始" - 即没有标准头:
SourceName TraceEventType: Id :
我已经实现了一个包装器,当TraceEventType设置为Verbose时执行此操作:
If _buffer.EventType = TraceEventType.Verbose Then
For Each listener As TraceListener In _traceSource.Listeners
listener.Write(_buffer.Text)
Next
Else
_traceSource.TraceEvent(_buffer.EventType, id, _buffer.Text)
End If
Run Code Online (Sandbox Code Playgroud)
我可以为所有跟踪执行此操作,但然后EventLog中的所有条目都将列出Level = Information.所以我希望能够指定跟踪消息的严重性,但我无法在TraceSource或TraceListeners上找到允许我这样做的任何方法.据我所知,TraceListener有这些选项可以写入它:
最后3个允许提供TraceEventType(正确标记EventLog条目,但结果输出到控制台,然后日志文件包含前缀,并以此结束(例如):
Bootstrapper Warning: 0 : Failed to validate assembly
有没有办法覆盖ConsoleTraceListener和TextWriterTraceListener如何格式化其输出以不包含此标头,同时能够使用TraceEventType标记条目(对于EventLog)?
这是迄今为止我提出的最好的:
For Each listener As TraceListener In _traceSource.Listeners
If listener.GetType Is GetType(ConsoleTraceListener) OrElse listener.GetType Is GetType(TextWriterTraceListener) Then
listener.Write(_buffer.Text)
Else
listener.TraceEvent(Nothing, _traceSource.Name, _buffer.EventType, id, _buffer.Text)
End If
Next
Run Code Online (Sandbox Code Playgroud)
这似乎有效,但在Microsoft 的TraceListener.TraceEvent方法的文档中,它说:
Important: This method is not intended to be called directly by application code but by members of the Debug, Trace, and TraceSource classes to write trace data to output.
..所以我不确定这是不是一件好事?
编辑:
我刚刚意识到,如果我在这里做了类似我最后一个例子的事情,我根本不需要TraceSource,因为它无论如何都被绕过了.但这也意味着我必须实现自己的过滤和切换机制(但这可能是一个好的代价,让它按照我想要的方式工作).
查看codeplex 上的Ukadc.Diagnostics项目。它是 System.Diagnostics 的一个插件,使您能够根据需要格式化日志记录/跟踪输出(类似于使用 log4net 和 NLog 所做的事情)。您通过配置使用它,因此您的代码不会直接依赖该库。该库附带了用于格式化的可配置对象以及利用格式化所需的自定义 TraceListener。该库还使您可以轻松编写自己的格式化“令牌”和自己的 TraceListener。
例如,您可以将 Ukadc.Diagnostics ConsoleTraceListener 配置为使用如下格式的语句:
{DateTime} {Source} {EventType} {Message}
Run Code Online (Sandbox Code Playgroud)
记录的每条消息都会包含日期/时间、源名称、事件类型和消息。
尝试一下,我想你会喜欢的。我自己也用过它(主要是用于原型设计,还没有用于“真正的”产品)并取得了良好的成功。
请注意,对于某些标记(例如 DateTime),您还可以应用适合该类型的标准格式(例如,对于 DateTime,您可以指定写入日期/时间的格式)。
Ukadc.Diagnostics 附带的文件跟踪侦听器还允许使用令牌系统指定其文件名。
| 归档时间: |
|
| 查看次数: |
2831 次 |
| 最近记录: |