【发布时间】:2010-09-17 13:09:16
【问题描述】:
我已经开始使用内置的 TraceSource 和 TraceListener 类,我想独立于 TraceSources 和 TraceListeners 修改事件的输出格式。 TraceListener 似乎应用了自己的格式。是否可以在不为我使用的每个 TraceListener 创建新类的情况下完全更改格式?
【问题讨论】:
我已经开始使用内置的 TraceSource 和 TraceListener 类,我想独立于 TraceSources 和 TraceListeners 修改事件的输出格式。 TraceListener 似乎应用了自己的格式。是否可以在不为我使用的每个 TraceListener 创建新类的情况下完全更改格式?
【问题讨论】:
您可以使用Trace 上的直接Write() 或WriteLine() 方法将直接文本放入您的TraceListener。
【讨论】:
Enterprise Library Logging Application Block (http://msdn.microsoft.com/en-us/library/cc309506.aspx) 建立在 .Net TraceSource 和 TraceListener 类之上(因此您几乎可以将其放入您的项目中,它就可以工作),它支持一个消息格式化程序您可以在 web.config(或 app.config)中进行配置。
【讨论】:
这已经很晚了,但是对于任何可能正在寻找支持类似于 log4net、NLog 和 LAB 中可用格式的 TraceSource/TraceListener 解决方案的后来者,您可以尝试Ukadc.Diagnostics。您可以使用格式化字符串配置 Ukadc 提供的 TraceListeners,它将在将跟踪写入侦听器时应用。您还可以编写自己的标记并将它们添加到格式化语句中。例如,我为了好玩而写了一个,每次检索它的值时都会简单地增加一个计数器。结果是在日志文件中,每一行都会收到一个顺序增加的数字。我写了另一个允许将来自 Trace.CorrelationManager.LogicalOperationStack 的信息添加到输出中。
我现在无法轻松访问具有该功能的计算机,否则我会发布这些示例。
【讨论】:
对于最终来到这里并仍在为 TraceListeners 寻找自定义格式的任何人,还有 Essential.Diagnostics https://essentialdiagnostics.codeplex.com/(披露:我参与了该项目)。
为了回答最初的问题,TraceListener 可以接受配置中的自定义属性,因此可以编写一个基于配置处理多种格式的 TraceListener,这可能比编写多个更灵活。
这就是 Essential.Diagnostics 所拥有的,它同时具有支持自定义格式字符串的 ColoredConsoleTraceListener 和 RollingFileTraceListener,许多格式值已经可用。
【讨论】: