System.Diagnostics.TraceSource中的跟踪输出格式

Fla*_*980 18 .net c# system.diagnostics tracesource

以下代码:

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();
}
Run Code Online (Sandbox Code Playgroud)

生成以下输出:

MyApplication信息:0:Hello World

跟踪输出开头的"MyApplication Information:0:"部分来自TraceSource类本身.

但是,我需要在行的开头有一个时间戳,我想将"信息"更改为"信息".

有没有办法在跟踪输出中获得更多自由,这样我可以将其配置为:

13:03:00 - MyApplication Info:Hello World

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

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

Sha*_*neB 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();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我的 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>
Run Code Online (Sandbox Code Playgroud)


fsi*_*zzi 5

在跟踪侦听器上设置TraceOutputOptions属性.格式是预定义的,但您可以选择使用TraceOptions枚举定义的其他数据.

  • 创建自己的跟踪侦听器,继承自文本编写器侦听器并覆盖执行格式化的方法.请改用该侦听器. (9认同)
  • 试过了,但似乎不是解决方案。使用 TraceOutputOptions,我只能在输出中指定我想要的 **additional** 元素。但实际上我想要**少**!;) (3认同)