20

以下代码:

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();
}

生成以下输出:

我的应用程序信息:0:Hello World

跟踪输出开头的“MyApplication Information: 0 :”部分来自 TraceSource 类本身。

但是,我需要在行首有一个时间戳,我也想将“信息”更改为“信息”。

有什么方法可以在跟踪输出中获得更多自由,以便我可以将其配置为:

13:03:00 - MyApplication信息:Hello World

我尝试了几个小时,但没有成功。无论我做什么,在输出行的开头,总是有这个常量预定义的“MyApplication Information:0:Hello World”输出。

MSDN 文档也没有透露任何有用的信息。

4

4 回答 4

6

也迟到了,但万一其他人降落在这里......

我喜欢保持简单。我在我的 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>
于 2014-05-16T14:41:47.320 回答
5

在跟踪侦听器上设置TraceOutputOptions属性。格式是预定义的,但您可以选择加入TraceOptions枚举定义的附加数据。

于 2012-11-08T13:50:14.573 回答
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

于 2014-03-30T17:52:31.777 回答
1

也许有点晚了,但如果您想要一个简单而通用的解决方案,您应该查看 CodePlex 上的Essentials 诊断项目(也可通过 NuGet获得)。

它定义了广泛的侦听器(允许自定义格式),输出到控制台、滚动文本和 XML 文件、事件日志、电子邮件等,还附带配置示例。

于 2014-03-18T10:28:32.497 回答