Изменить формат для определенных полей в Nlog - PullRequest
2 голосов
/ 09 февраля 2012

По разным причинам я хотел бы выводить processId в шестнадцатеричном, а не в десятичном формате по умолчанию при выводе журналов из NLog.

Я использую ${processid} в макете, который выводит его в десятичном виде. Я знаю, что можно форматировать даты, используя атрибут format, например ${shortdate:format=YYYY-mm-dd}. Есть ли что-нибудь похожее для целых?

1 Ответ

0 голосов
/ 09 февраля 2012

Я не знаю ничего, что будет делать это из коробки с 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, которое затем применяется к значению перед записью.

...