我正在使用自己的自定义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的代码。
答案 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参考