【发布时间】:2012-03-02 01:24:53
【问题描述】:
由于各种原因,我希望在从 NLog 输出日志时以十六进制而不是默认的十进制格式输出 processId。
我在布局中使用${processid},它以十进制输出。我知道可以使用格式属性来格式化日期,例如${shortdate:format=YYYY-mm-dd}。整数有什么类似的吗?
【问题讨论】:
标签: nlog
由于各种原因,我希望在从 NLog 输出日志时以十六进制而不是默认的十进制格式输出 processId。
我在布局中使用${processid},它以十进制输出。我知道可以使用格式属性来格式化日期,例如${shortdate:format=YYYY-mm-dd}。整数有什么类似的吗?
【问题讨论】:
标签: nlog
我不知道有什么东西可以用 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 属性,然后在写入之前将其应用于值。
【讨论】: