更改Nlog中特定字段的格式

时间:2012-02-09 14:57:36

标签: nlog

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

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

1 个答案:

答案 0 :(得分:0)

我不知道任何可以用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属性,然后在写入之前应用于该值。