以下代码:
static void Main(string[] args)
{
TraceSource ts = new TraceSource("MyApplication");
ts.Switch = new SourceSwitch("MySwitch");
ts.Switch.Level = SourceLevels.All;
ts.Listeners.Add(new TextWriterTraceListener(Console.Out));
ts.TraceInformation("Hello World");
Console.ReadKey();
}
生成以下输出:
myApplication信息:0:Hello World
零件" myapplication信息:0:"在跟踪输出的开头,来自TraceSource类本身。
但是,我需要在行开始时有一个时间戳,我也想将"信息"更改为"信息"。
是否有任何方法可以在跟踪输出中获得更多的自由,以便我可以将其配置为:
13:03:00 - myApplication info :Hello World
我尝试了几个小时,但没有成功。无论我做什么,在输出线的开头,总是有一个常数的预定义的" myapplication信息:0:Hello world"输出。
MSDN文档也没有透露任何有用的信息。
也迟到了,但如果其他人降落在这里...
我喜欢保持简单。我在app.cs中使用一种静态跟踪方法,该方法与我在启动时创建的单个轨迹相关。这使我可以在整个应用程序中访问它,并保持app.config简单:
public static void Trace(TraceEventType eventType, string message)
{
if (_TraceSource.Switch.ShouldTrace(eventType))
{
string tracemessage = string.Format("{0}t[{1}]t{2}", DateTime.Now.ToString("MM/dd/yy HH:mm:ss"), eventType, message);
foreach (TraceListener listener in _TraceSource.Listeners)
{
listener.WriteLine(tracemessage);
listener.Flush();
}
}
}
我的app.config条目:
<system.diagnostics>
<sources>
<source name="mytracesource" switchValue="All">
<listeners>
<add name="mytracelistener"
type="System.Diagnostics.TextWriterTraceListener"
initializeData="trace.log">
</add>
</listeners>
</source>
</sources>
</system.diagnostics>
在跟踪侦听器上设置TraceOutputoptions属性。格式是预定义的,但是您可以选择以TraceOptions枚举定义的其他数据。
traceSource.TraceInformation最终在每个添加标题中添加的侦听器上调用Tracelistener.traceevent。幸运的是,TraceListener
具有一个writeline方法,您可以用来产生自定义输出。
static void Main(string[] args)
{
TraceSource ts = new TraceSource("MyApplication");
ts.Switch = new SourceSwitch("MySwitch");
ts.Switch.Level = SourceLevels.All;
ts.Listeners.Add(new TextWriterTraceListener(Console.Out));
for (int i = 0; i < ts.Listeners.Count; i++)
{
var listener = ts.Listeners[i];
listener.WriteLine(
string.Format("{0} - {1} Info: {2}",
DateTime.Now.ToString("HH:mm:ss"), ts.Name, "Hello World"));
listener.Flush();
}
Console.ReadKey();
}
输出:
13:52:05 - myApplication info :Hello World
可能有点晚了,但是如果您想要一个简单且通用的解决方案,则应该查看CodePlex上的Essentials诊断项目(也可以通过Nuget获得)。
它定义了各种侦听器(允许自定义格式),然后输出到控制台,滚动文本和XML文件,事件日志,电子邮件等,并带有配置示例。