1

我正在使用 Microsoft Enterprise Library Logging Application Block 记录异常。我正在使用数据库跟踪侦听器。

日志条目的时间戳默认为 UTC 时间。

我知道我可以通过像这样设置日志格式化程序在“日志”表的“格式化消息”列中获得本地时间的时间戳:时间戳:{timestamp(local)}

如何使用“时间戳”列做同样的事情?

谢谢你。

4

1 回答 1

2

做你想做的最简单的方法是设置 Timestamp.LogEntry

例如:

LogEntry le = new LogEntry()
{
    Message = "Log it",
    TimeStamp = DateTime.Now // use local time
};

le.Categories.Add("General");

Logger.Write(le);

执行您想要的操作的其他选项是创建自定义跟踪侦听器或修改WriteLog存储过程以使用您希望的任何值。您可以简单地使用GETDATE()或者您可以对传入的 UTC 时间戳进行一些操作:

DATEADD(HOUR, DATEDIFF(HOUR, GETUTCDATE(), GETDATE()), timestamp) 

作为一个兴趣点(因为您通常不会使用这种类型的代码),如果您FormattedDatabaseTraceListener直接使用它的 Write() 方法,它会使用本地 DateTime。例如:

var dbWriter = new FormattedDatabaseTraceListener(
    EnterpriseLibraryContainer.Current.GetInstance<Database>(),
    "writeLog", "AddCategory", new TextFormatter());

dbWriter.Write("Log this!", "General");

但正如评论者所写,我建议坚持使用 UTC。

于 2011-10-12T04:18:20.227 回答