首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用NLog的自定义日期格式

使用NLog的自定义日期格式
EN

Stack Overflow用户
提问于 2015-03-23 23:35:55
回答 2查看 5K关注 0票数 3

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

{日期:通用时间=真:format=yyyy dd HH:mm:ss.ffffZ}

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

与其在多个应用程序中插入这些内容,不如定义一个变量来实现这一点,例如:

{我们的}

我周围有黑客,但我想不出该怎么做。有可能吗?

谢谢

PS。{longdate}确实包括时区,但它降低了毫秒。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-24 17:47:11

对于您来说,最简单的事情可能只是咬紧牙关,使用常规的NLog DateLayoutRenderer,并在每个配置文件中指定配置值。如果您想保持配置文件的简单性,可以编写您自己的date LayoutRenderer,它以特定的格式生成日期。

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

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

您实际上不需要更多的选项,因为您可以很容易地使用内置的DateLayoutRenderer实现您想要的格式。这个实现只是在您的NLog.config文件中节省了一些精力。

代码语言:javascript
运行
复制
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文件中使用以下内容:

代码语言:javascript
运行
复制
{utczdate}

祝好运!

票数 4
EN

Stack Overflow用户

发布于 2015-11-06 14:23:29

使用${date:universalTime=true:format=o}

格式2015-11-06T14:24:52.4025753 Z ISO 8601

您需要往返("O","o")格式说明符。

"O“或"o”标准格式说明符使用保留时区信息并发出符合ISO 8601的结果字符串的模式表示自定义日期和时间格式字符串。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29222410

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档