在.net核心的NLog中添加日志消息属性

Pur*_*aik 6 error-logging nlog .net-core asp.net-core

NLog用于在.net核心中记录消息.

我加入NLogStartUp.cs,如下所示:

loggerFactory.AddNLog();
Run Code Online (Sandbox Code Playgroud)

要记录到文件,我使用以下方法:

logger.LogInformation("Message");
Run Code Online (Sandbox Code Playgroud)

我想在我的消息中添加自定义NLog事件属性.但是LogInformation()不允许我传递它.我怎样才能做到这一点?

tru*_*dia 7

如果要自定义布局属性(NLog称其为布局渲染器),则可以使用EventProperties布局渲染器。您可以在代码中简单地做到这一点:

var logger = LogManager.GetCurrentClassLogger();
var eventInfo = new LogEventInfo(LogLevel.Info, logger.Name, "Message");
eventInfo.Properties["CustomValue"] = "My custom string";
eventInfo.Properties["CustomDateTimeValue"] = new DateTime(2020, 10, 30, 11, 26, 50);
// You can also add them like this:
eventInfo.Properties.Add("CustomNumber", 42);
// Send to Log
logger.Log(eventInfo);
Run Code Online (Sandbox Code Playgroud)

然后,您将能够在nlog.config中添加这些(您组成的任何属性)

<target>
  <parameter name="@customtime" layout="${event-properties:CustomDateTimeValue:format=yyyy-MM-dd HH\:mm\:ss}" />
  <parameter name="@customvalue" layout="${event-properties:item=CustomValue}" />
  <parameter name="@customnumber" layout="${event-properties:item=CustomNumber}" />
</target>
Run Code Online (Sandbox Code Playgroud)

当将NLog与AspNetCore一起使用时,为ASP.NET Core添加NLog.Web软件包很有用,它为您提供了许多预定义的布局渲染器。您可以在其Github页面上找到有关NLog.Web for AspNetCore的更多信息。

这个AspNetCore软件包将为您提供以下内容:

<parameter name="@UserName" layout="${aspnet-user-identity}" />
<parameter name="@MvcAction" layout="${aspnet-MVC-Action}" />
<parameter name="@Session" layout="${aspnet-session:Variable=User.Name:EvaluateAsNestedProperties=true}" />
... etc
Run Code Online (Sandbox Code Playgroud)

您可以在NLog.Web.AspNetCore Github页面上找到完整列表。