出于各种原因,我想在从NLog输出日志时以十六进制而不是默认的十进制格式输出processId。
我在布局中使用${processid}
,以十进制输出。我知道可以使用format属性格式化日期,例如${shortdate:format=YYYY-mm-dd}
。整体有什么类似的东西吗?
答案 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属性,然后在写入之前应用于该值。