以下代码:
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 Information:0:Hello World
跟踪输出开头的“MyApplication Information:0:”部分来自TraceSource类本身。
但是,我需要在行的开头加上时间戳,并且我想将“信息”更改为“信息”。
有没有办法在跟踪输出中获得更多自由,以便我可以将其配置为:
13:03:00 - MyApplication 信息:Hello World
我尝试了几个小时,但没有成功。无论我做什么,在输出行的开头,始终有这个常量预定义的“MyApplication Information:0:Hello World”输出。
MSDN文档也没有透露任何有用的信息。
答案 0 :(得分:5)
在跟踪侦听器上设置TraceOutputOptions属性。格式是预定义的,但您可以选择加入由TraceOptions枚举定义的其他数据。
答案 1 :(得分:4)
也迟到了,但万一其他人降落在这里......
我喜欢保持简单。我在App.cs中使用了一个静态Trace方法,它与我在启动时创建的一个TraceSource绑定。这允许我在整个应用程序中访问它并保持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>
答案 2 :(得分:3)
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 信息:Hello World
答案 3 :(得分:1)
也许有点迟了但是如果你想要一个简单易用的解决方案,你应该看看CodePlex上的Essentials Diagnostics项目(也可用through NuGet)。
它定义了广泛的侦听器(允许使用自定义格式),输出到控制台,滚动文本和XML文件,事件日志,电子邮件等,并附带配置示例。