Я не знаю ничего, что будет делать это из коробки с NLog, но вы можете довольно легко написать LayoutRendererWrapper для этого. В вашем файле NLog.config вы должны обернуть поле, которое вы хотите преобразовать, примерно так:
${hex:inner=${processid}}
Вот запись в блоге, описывающая функцию:
http://nlog -project.org / 2008/11/22 / упаковщик-топологии рендеры-являются ближайшими к 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, которое затем применяется к значению перед записью.