gpt4 book ai didi

nlog - 使用 NLog 自定义日期格式

转载 作者:行者123 更新时间:2023-12-01 11:34:07 29 4
gpt4 key购买 nike

在我看来,NLog 中的内置日期格式没有正确包含时区。我们需要用尾随 Z 记录 UTC 时间,以便 Splunk 知道本地时间是什么,例如:

{日期:universalTime=true:format=yyyy-MM-dd HH:mm:ss.ffffZ}

这会产生我们需要的正确日期。

与其将它插入到我们跨多个应用程序的所有配置中,我更愿意定义一个变量来执行此操作,例如:

{我们的日期}

我有一些技巧,但我不知道该怎么做。可能吗?

谢谢

附言。 {longdate} 确实包括时区,但它会减少毫秒数。

最佳答案

对您来说,最简单的事情可能就是硬着头皮使用常规的 NLog DateLayoutRenderer 并在每个配置文件中指定配置值。如果您希望保持配置文件简单,您可以编写自己的日期 LayoutRenderer 以特定格式生成日期。

这是一个粗略的实现(未测试)。它将始终以您在上面指定的格式记录日期。我基于 NLog 的 DateLayoutRenderer,您可以在此处找到其来源:

https://github.com/NLog/NLog/tree/master/src/NLog/LayoutRenderers

您实际上不需要更多选项,因为您可以使用内置的 DateLayoutRenderer 轻松实现所需的格式。此实现只是为您在 NLog.config 文件中节省了一些精力。

namespace NLog.LayoutRenderers
{
using System.ComponentModel;
using System.Text;
using NLog.Config;

/// <summary>
/// Current date and time.
/// </summary>
[LayoutRenderer("utczdate")]
[ThreadAgnostic]
public class UTCZDateLayoutRenderer : LayoutRenderer
{
/// <summary>
/// Initializes a new instance of the <see cref="UTCZDateLayoutRenderer" /> class.
/// </summary>
public UTCZDateLayoutRenderer()
{
}

/// <summary>
/// Renders the current date and appends it to the specified <see cref="StringBuilder" />.
/// </summary>
/// <param name="builder">The <see cref="StringBuilder"/> to append the rendered data to.</param>
/// <param name="logEvent">Logging event.</param>
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
var ts = logEvent.TimeStamp;
builder.Append(ts.ToString("yyyy-MM-dd HH:mm:ss.ffffZ", CultureInfo.InvariantCulture));
}
}
}

您可以像这样在 NLog.config 文件中使用它:

{utczdate}

祝你好运!

关于nlog - 使用 NLog 自定义日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29222410/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com