记录应用程序块:数据库跟踪侦听器时间戳

发布于 2024-12-09 11:06:16 字数 248 浏览 1 评论 0原文

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

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

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

我如何对“时间戳”列执行相同的操作?

谢谢。

I'm logging exception using Microsoft Enterprise Library Logging Application Block.
I'm using the database trace listener.

Timestamp of the log entry is in UTC time by default.

I know I can have the timestamp of local time in the 'FormattedMessage' column of the 'Log' table by setting the log formatter like this :
Timestamp: {timestamp(local)}

How can I do the same thing with the 'Timestamp' column ?

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

末骤雨初歇 2024-12-16 11:06:16

完成您想要的操作的最简单方法是设置 LogEntryTimestamp 属性。

例如:

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。

The easiest way to do what you want is to set the Timestamp property of the LogEntry.

E.g.:

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

le.Categories.Add("General");

Logger.Write(le);

Other options to do what you want would be to create a Custom Trace Listener or to modify the WriteLog stored procedure to use any value you wish. You could simply use GETDATE() or you could do some manipulation of the passed in UTC Timestamp:

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

As a point of interest (since you wouldn't normally use this type of code), if you use the Write() method of the FormattedDatabaseTraceListener directly it uses the local DateTime. E.g.:

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

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

But as a commenter wrote, I would recommend sticking with UTC.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文