system.diarostics.traceource中跟踪输出的格式



以下代码:

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文件,事件日志,电子邮件等,并带有配置示例。

最新更新