Один из способов - создать собственное средство визуализации макета.
Для этого есть 2 варианта:
Лямбда-метод
Создайте лямбда-методы и зарегистрируйте их перед загрузкой другого NLog вещи (остерегайтесь статики), например, в main ().
Лямбда получает LogEventInfo , который включает следующие свойства: Уровень, Сообщение (неформатированное), Форматированное сообщение, Параметры (отправить на Log.Info), необязательное исключение и свойства (именованные параметры)
//Create ${message-length}
// NLog 4.7+ syntax
NLog.LogManager.Setup().SetupExtensions(s =>
s.RegisterLayoutRenderer("message-length", (logevent) => logEvent.FormattedMessage.Length)
);
Class
Если вам нужны дополнительные элементы управления и параметры, вы также можете создать класс, наследуемый от NLog.LayoutRenderers. LayoutRenderer
1. Настройка
/// <summary>
/// E.g. usage: ${MyFormatter:MyLayout:${uppercase}} or ${MyFormatter:${uppercase}}
/// </summary>
[LayoutRenderer("MyFormatter")]
public class MyFormatterLayoutRenderer: LayoutRenderer
{
[RequiredParameter]
public Layout MyLayout { get; set; }
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
var text = MyLayout.Render(logEvent);
builder.Append(text);
}
}
2. Зарегистрируйте
Вам необходимо зарегистрировать средство визуализации макета :
// NLog 4.7+ syntax
NLog.LogManager.Setup().SetupExtensions(s =>
s.RegisterLayoutRenderer<MyNamespace.MyFormatterLayoutRenderer>("MyFormatter")
);
3. Использование
Используйте его следующим образом, установите атрибут макета цели. Например:
<target name="logfile" xsi:type="File" fileName="logfile.log" layout="${message-length} - ${level} - ${message} - ${exception}" />
<target name="logconsole" xsi:type="Console" layout="${message-length} - ${level} - ${message} - ${exception}" />
Подробнее здесь