EnterpriseLibrary.日志记录以1小时的差写日志

本文关键字:日志 记录 EnterpriseLibrary 1小时 | 更新日期: 2023-09-27 17:50:01

我们遇到了一个奇怪的日志问题。我们正在使用Microsoft.Practices.EnterpriseLibrary.Logging库在我们的web应用程序中进行日志记录,问题是它写的日志与当前系统时间相差1小时。

我们的日志记录器基于本文,日志条目中的时间从未在代码中设置过。每个日志条目都有一个标题,看起来像这样:

MainLogSource Information: 0 : Timestamp: 11/04/2011 10:15:32,所以这个时间戳总是比系统时间早1小时(例如,这个条目出现在11:15)。

问题出在哪里?由于

EnterpriseLibrary.日志记录以1小时的差写日志

默认情况下,Enterprise Library使用UTC时间戳进行日志记录,因此这些不受夏令时的影响。

您可以更改.config文件中的格式化程序以使用当地时间(请参阅附带的问题),但要注意,当发生夏令时更改时,这会导致重复的条目。

Enterprise Library 5.0 - Application Logging - error DateTime

文化无知的一面比较?

如:记录器以UTC格式写出时间,您将其与本地系统时间进行比较,恰好将其设置为一个小时的差异?例如,中欧比UTC时间早1小时(半年)。

你的语言环境设置是什么?这是一个相当普遍的现象。基本上是可比较的伐木工等等。喜欢用UTC设置东西,你也应该这样做。我知道公司在UTC时间运行服务器,所以比较日志和系统时钟更容易(以系统时钟总是关闭为代价)。

这可能是因为EntLib默认使用UTC记录时间戳。你可以在这里重写

在代码中设置LogEntry类的TimeStamp属性。您可以将它设置为您当地的时间。这将反映在两个地方:TimeStamp和ExtendedProperties。像下图:

    var newLog = new LogEntry(objException.Message, "General", 1, 1, TraceEventType.Error, "YourApp", null);
    newLog.TimeStamp = DateTime.Now;

我想到了以下几种可能性:

  • 任何一台正在运行应用程序的机器的时钟还没有调整为夏令时

  • 当获得请求的时间为UTC而不是当前地区的时区时