TextWriterTraceListener在每行的开头写入app filename.exe

时间:2011-10-21 11:26:04

标签: c# logging customization trace

我正在使用自己的自定义TextWriterTraceListener为每个记录的行添加时间戳,以便输出如下所示:

  LoggingExperiments.exe Information: 0 : 13:11 Testing infos
  LoggingExperiments.exe Error: 0 : 13:11   Testing errors

以下是代码:

class CustomTextWriterTraceListener : TextWriterTraceListener
{
    public CustomTextWriterTraceListener(string file) : base(file) 
    {            
    }        

    public override void WriteLine(string message)
    {            
        base.Write(DateTime.Now.ToShortTimeString());
        base.Write("\t");
        base.WriteLine(message); // #1
        Writer.WriteLine(message); // #2
    }
}

如何格式化输出,使其在每一行上没有前导可执行文件名?或者更改记录的信息顺序?

我是否应该始终调用“Writer.WriteLine”并格式化它的参数(注释#2),或者还有其他方法可以覆盖此行为并保持调用基本方法,例如标记为#1的代码。

1 个答案:

答案 0 :(得分:1)

无法重现您的行为...... 我试过这段代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics;
using System.Collections;

namespace TraceExample
{
    class Program
    {
        static void Main(string[] args)
        {
            CustomTraceListener c = new CustomTraceListener("log.txt");
            Trace.Listeners.Add(c);
            Trace.WriteLine("WriteLine","Info");
            Trace.Flush();
        }
    }

    public class CustomTraceListener : TextWriterTraceListener
    {
        public CustomTraceListener(string file) : base(file){}    
        public override void WriteLine(string message)
        {
            base.Write(DateTime.Now.ToShortTimeString());
            base.Write("\t");
            base.WriteLine(message); // #1
            Writer.WriteLine(message); // #2
        }
    }
}

输出是:

您可以在配置文件中执行:

17.02   Info: WriteLine
Info: WriteLine



<configuration>
  <system.diagnostics>
    <trace autoflush="false" indentsize="4">
      <listeners>
        <add name="consoleListener"
          type="System.Diagnostics.ConsoleTraceListener" 
          traceOutputOptions="ProcessId, DateTime" />
      </listeners>
    </trace>
  </system.diagnostics>
</configuration>

查看 traceOutputOptions

Here MSDN参考