企业库4.1日志时间戳如何显示毫秒

10
下面是配置文件中的内容。
 <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 信息...

但是没有显示毫秒,这对于性能检测非常有用。是否有人知道如何显示毫秒?谢谢。


无论如何,你都不应该这样做,即使你可以。数据是没有意义的。请参见下面的答案。 - Daniel Dyson
2个回答

19
你可以指定“标准”或“自定义”的DateTime格式字符串到时间戳模板标记中: StandardCustomDateTime
<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 Information General This is the message

默认情况下,日期时间将以UTC时间显示。如果您希望使用本地时间,则需要在格式字符串前加上"local:"。例如:{timestamp(local:MM/dd/yyyy HH:mm:ss.fffffff)}

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


1
如果您不想为本地时间提供格式,则只需使用:{timestamp(local)} - John K

4
很遗憾,企业库日志记录使用的是 .net DateTime,所以尽管像 @Tuzo 描述的那样记录毫秒是可能的,但它最好是无意义的,最糟糕的情况下会误导人。Eric Lippert 对此进行了有趣的解释:https://dev59.com/GHI95IYBdhLWcg3wzhZ9#2143784
任何值的精度最多为正负 50 毫秒(尽管这因计算机而异 - 这是不依赖此功能的另一个原因)。这是因为日期时间的设计是为了回答“现在是什么日期和时间?” 而不是回答“花费了多长时间?”。对于后者,请使用 Stopwatch 类。
显然,拥有记录您定时的日志框架的便利性听起来很诱人,但您不应该依赖它来记录低于秒级别的时间。
当我的 MVC OnActionExecuting 和 OnActionExecuted 日志返回相同的微秒级时间时,我第一次遇到了这个问题。非常令人印象深刻,也同样错误。

1
正如我所提到的,对于那些想要记录方法进入和退出性能跟踪的人来说,可以考虑使用Tracer类,该类使用Stopwatch。此外,还可以查看LogCallHandler,它也采用AOP方法提供进入和退出时间。 - Randy Levy
1
确实,Tracer是更好的选择。我的回答意思是,根据问题使用EntLib是毫无意义的。 - Daniel Dyson
谢谢你们两位的澄清! - gReX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接