Enterprise Library 4.1记录时间戳如何显示毫秒

时间:2011-06-01 17:03:41

标签: logging enterprise-library app-config

以下是配置文件。

 <formatters>
      <add template="{timestamp} {severity} {category} {message}" type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        name="SingleLineFormatter" />
 </formatters>

显示

31/05/2011 11:43:24信息......

但是没有显示毫秒可用于穿孔仪器的毫秒,有谁知道如何显示?感谢。

2 个答案:

答案 0 :(得分:18)

您可以为时间戳模板标记指定StandardCustom DateTime格式字符串:

<formatters>
      <add 
        template="{timestamp(MM/dd/yyyy HH:mm:ss.fffffff)} {severity} {category} {message}" 
        type="Microsoft.Practices.EnterpriseLibrary.Logging.Formatters.TextFormatter, Microsoft.Practices.EnterpriseLibrary.Logging, Version=4.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        name="SingleLineFormatter" />
 </formatters>

这会输出类似:

  

06/01/2011 20:12:43.3405776   信息一般这是   消息

默认情况下,DateTime将采用UTC时间。如果您希望使用本地时间,请在格式字符串前加上“local:”。例如{timestamp(local:MM/dd/yyyy HH:mm:ss.fffffff)}

此外,如果您要记录方法条目和退出的性能跟踪,您可能需要查看Tracer类。

答案 1 :(得分:4)

不幸的是,企业库日志记录使用.net DateTime,因此尽管@Tuzo描述的记录毫秒是可能的,但它最多也是无意义的,最坏的是误导性的。

Eric Lippert写了一个有趣的解释:https://stackoverflow.com/a/2143784/230428

任何值的精度最好是加减50ms(尽管这种情况因机器而异 - 这是不依赖于此的另一个原因)。这是因为日期时间是为了回答“什么日期和时间?”这个问题而设计的。而不是“这需要多长时间?”的问题。对于后者,请使用秒表类。

显然,让日志框架远离并记录你的时间的便利听起来很诱人,但你不应该依赖它来做任何低于二次精度的时间。

当我的MVC OnActionExecuting和OnActionExecuted日志在同一时间返回到微秒时,我首先遇到了这个问题。非常令人印象深刻,同样错误。