Расширяемость NLog - Как добавить пользовательское поле, используя ExtendValues?
Я пытаюсь добавить некоторые пользовательские поля в NLog, используя расширяемость.
Часть моей nlog.config
файл выглядит так: (упрощенно для выставки)
<nlog>
<extensions>
<add assembly="Logzio.DotNet.NLog"/>
</extensions>
<variable name="currentUser" value="test" />
<targets async="true">
<target name="logzio" type="Logzio" token="myToken">
<contextproperty name="currentUser" layout="${currentUser}" />
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="logzio" />
</rules>
</nlog>
В каждом контроллере у меня есть что-то подобное (я использую ASP.NET MVC5)
private static Logger logger = LogManager.GetCurrentClassLogger();
Затем я отправляю свои логи в logzio используя
logger.Fatal("Something bad happens");
Прямо сейчас, currentUser
всегда иметь значение test
, что логично.
Однако, несмотря на документацию, я не понимаю, как динамически изменить currentUser
значение по идентификатору моего текущего зарегистрированного пользователя.
Должен ли я создать своего рода фабрику? (если да, то как? Я не в ладах с фабриками)
Должен ли я изменить свой logger
переменная? Если так, то как?
Кусок кода будет крайне приветствоваться.
Спасибо, что указали, где я не прав
РЕДАКТИРОВАТЬ
После ответа @Rolf я создал этот пользовательский макет
[LayoutRenderer("custom-layout")]
public class CustomLayoutRenderer : LayoutRenderer
{
public string IdUser { get; set; }
protected override void Append(StringBuilder builder, LogEventInfo logEvent)
{
logEvent.Properties.Add("currentUser", "HowToPassCustomDataHere?");
builder.Append("test from custom-layout");
}
}
и я изменил nlog.config соответственно, добавив
layout="${message} ${custom-layout}"
к моему <target>
Тем не менее, я до сих пор не понимаю, как передать пользовательское значение currentUser
, В logz.io у меня есть "HowToPassCustomDataHere?" в качестве значения currentUser
,
(Кстати, ${aspnet-user-identity}
отлично и отлично работает; Однако я хотел бы понять, как передать пользовательское значение для моего средства визуализации макета. В моем случае что-то вроде ${aspnet-user-id}
)
1 ответ
Вы можете попробовать один из этих NLog layoutrenderers, чтобы получить текущее имя пользователя:
Вы также можете создать свой собственный NLog LayoutRenderer: https://github.com/NLog/NLog/wiki/How-to-write-a-custom-layout-renderer
Пример того, как предоставить его как currentUser:
<target name="logzio" type="Logzio" token="myToken">
<contextproperty name="currentUser" layout="${aspnet-user-identity}" />
</target>