【问题标题】:Change format for specific fields in Nlog更改 Nlog 中特定字段的格式
【发布时间】:2012-03-02 01:24:53
【问题描述】:

由于各种原因,我希望在从 NLog 输出日志时以十六进制而不是默认的十进制格式输出 processId。

我在布局中使用${processid},它以十进制输出。我知道可以使用格式属性来格式化日期,例如${shortdate:format=YYYY-mm-dd}。整数有什么类似的吗?

【问题讨论】:

    标签: nlog


    【解决方案1】:

    我不知道有什么东西可以用 NLog 开箱即用地做到这一点,但你可以很容易地编写一个 LayoutRendererWrapper 来做到这一点。在您的 NLog.config 文件中,您将包装要转换的字段,如下所示:

    ${hex:inner=${processid}}
    

    这是描述该功能的博客文章:

    http://nlog-project.org/2008/11/22/wrapper-layout-renderers-are-coming-to-nlog.html

    您可以在此处找到所有已交付的 LayoutRendererWrappers 的来源:

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

    包装器可能看起来像这样(未编译和未经测试):

    [LayoutRenderer("hex")]
    [ThreadAgnostic]    
    public sealed class HexLayoutRendererWrapper : WrapperLayoutRendererBase
    {
      public HexLayoutRendererWrapper()
      {
        this.Culture = CultureInfo.InvariantCulture;
      }
      public CultureInfo Culture { get; set; }
    
      protected override string Transform(string text)        
      {
        int x;
        if (Int32.TryParse(text, out x))
        {
          string hex = string.Format("{0:X}", x);
          return hex;
        }
        else
        {
          return text;        
        }
      }    
    }
    

    您甚至可以概括并制作一个“格式化”包装器,该包装器具有一个 Format 属性,然后在写入之前将其应用于值。

    【讨论】:

      猜你喜欢
      • 2018-05-13
      • 2015-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 2012-08-25
      相关资源
      最近更新 更多