将时间戳添加到 Trace.WriteLine()

Posted

技术标签:

【中文标题】将时间戳添加到 Trace.WriteLine()【英文标题】:Add Timestamp to Trace.WriteLine() 【发布时间】:2010-10-26 04:35:17 【问题描述】:

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

除了 Trace.WriteLine(DateTime.Now + "Something wrong!") ,有没有解决方案默认 DateTime ?

【问题讨论】:

你可以使用Essential Diagnostics like so 【参考方案1】:

通过代码

您可以配置 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");

【讨论】:

配置文件等效项:traceOutputOptions = "DateTime, Timestamp" 到 system.diagnostics/sources/listeners/add 标记。保存MSDN lookup - http://msdn.microsoft.com/en-us/library/a10k7w6c(v=vs.110).aspx,这里的其他答案之一中提到了它。不知何故,最终在另一个答案之前看到了 MSDN。 请注意,跟踪输出选项不适用于 Trace.WriteLine,仅适用于 Trace.TraceInformation / Trace.Trace* 方法。【参考方案2】:

您可以将app.config 文件设置为使用traceOutputOptions 为所有跟踪侦听器使用时间戳(相对时间和当前时间)

traceOutputOptions = "DateTime, Timestamp";

【讨论】:

根据更流行的答案之一,这仅在使用 TraceXXX 方法时有效。 这是使用跟踪侦听器时的方法 【参考方案3】:

只需编写您自己的“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);

【讨论】:

这些应该是静态方法,因为不依赖于调用它们的对象。 我建议使用 UTC 时间戳进行日志记录,以避免时区等出现任何歧义 - 您可能还想使用 Format 或 StringBuilder 来避免所有这些临时字符串 其实最高效的字符串拼接方法大概是string.Concat()。反正也没关系。【参考方案4】:

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

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

【讨论】:

这行不通,因为 DoTrace 是静态的,您无权访问 Trace。你可以使用 HttpContext.Current.Trace.WriteLine(DateTime.Now + ": " + message) System.Diagnostics.Trace.WriteLine() 不是也是静态的吗?我猜这取决于他使用的是哪个:/【参考方案5】:

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

【讨论】:

【参考方案6】:

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

【讨论】:

以上是关于将时间戳添加到 Trace.WriteLine()的主要内容,如果未能解决你的问题,请参考以下文章

Debug|Trace.WriteLine 来自 Visual Studio 中的 C# 插件 - 通过 ConsoleTraceListener 显示

Trace 与 Debug 类

Windows Azure 中的持久日志记录

将默认时间戳添加到雪花中的表

将时间戳添加到pdf

将数据从雪花卸载到 s3 时,如何将日期时间戳添加到 zip 文件?