28

在我的 C# .NET 应用程序中,我遇到了 Trace.WriteLine() 方法的问题。我经常使用这种方法,并且每次使用它时都想添加一个时间戳。

代替 Trace.WriteLine(DateTime.Now + "Something wrong!"),是否有默认 DateTime 的解决方案?

4

6 回答 6

96

通过代码

您可以配置 TraceOutputOptions 标志枚举。

var listener = new ConsoleTraceListener() { TraceOutputOptions = TraceOptions.Timestamp | TraceOptions.Callstack };
Trace.Listeners.Add(listener);

Trace.TraceInformation("hello world");

这不适用于 Write 和 WriteLine,您使用了 TraceXXX 方法。

通过 app.config

这也可以在您的 App.config 中配置,具有一定的等效性并使用 TraceSource:

<configuration>
  <system.diagnostics>
    <trace autoflush="true">
      <sources>
        <source name="TraceSourceApp">
          <listeners>
            <add name="myListener" type="System.Diagnostics.ConsoleTraceListener" traceOutputOptions="Timestamp" />
          </listeners>
        </source>
      </sources>
    </trace>
  </system.diagnostics>
</configuration>

在代码中,您可以:

private static TraceSource mySource =   
        new TraceSource("TraceSourceApp");
static void Main(string[] args)
{
  mySource.TraceInformation("hello world");
}
于 2009-05-15T06:55:12.810 回答
19

您可以app.config使用traceOutputOptions

traceOutputOptions = "DateTime, Timestamp";
于 2011-09-01T23:47:58.427 回答
2

只需编写您自己的 " TraceLine(string msg)" 方法并开始调用它:

void TraceLine(string msg, bool OmitDate)
{
    if (!OmitDate)
        msg = DateTime.Now + " " + msg;
    Trace.WriteLine(msg);
}

void TraceLine(string msg) {TraceLine(msg, false);}
于 2009-05-14T13:45:47.730 回答
1

您可以编写一个包装方法来做到这一点:

public static void DoTrace(string message)
{
    DoTrace(message,true);
}

public static void DoTrace(string message, bool includeDate)
{
    if (includeDate) {
        Trace.WriteLine(DateTime.Now + ": " + message);
    } else {
        Trace.WriteLine(message);
    }
}
于 2009-05-14T13:44:09.933 回答
0

我们使用 log4net TraceAppender,您可以在其中轻松配置布局或过滤。

于 2009-05-14T13:47:15.527 回答
0

您可以编写自己的,如此TextWriterTraceListener所述。

于 2011-06-27T13:21:41.383 回答