我正在使用 Microsoft Enterprise Library Logging Application Block 记录异常。我正在使用数据库跟踪侦听器。
日志条目的时间戳默认为 UTC 时间。
我知道我可以通过像这样设置日志格式化程序在“日志”表的“格式化消息”列中获得本地时间的时间戳:时间戳:{timestamp(local)}
如何使用“时间戳”列做同样的事情?
谢谢你。
我正在使用 Microsoft Enterprise Library Logging Application Block 记录异常。我正在使用数据库跟踪侦听器。
日志条目的时间戳默认为 UTC 时间。
我知道我可以通过像这样设置日志格式化程序在“日志”表的“格式化消息”列中获得本地时间的时间戳:时间戳:{timestamp(local)}
如何使用“时间戳”列做同样的事情?
谢谢你。
做你想做的最简单的方法是设置 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。