NLog 在日志文件中包含 EventId

Jes*_*sse 2 c# nlog asp.net-core

.NETCore 2.2 中的 ILogger 有一个 EventId 参数。

public static void LogError(this ILogger logger, EventId eventId, string message, params object[] args);
Run Code Online (Sandbox Code Playgroud)

如何让 NLog 将其输出到日志文件?

我的 nlog.config:

public static void LogError(this ILogger logger, EventId eventId, string message, params object[] args);
Run Code Online (Sandbox Code Playgroud)

问题:EventId 永远不会出现在日志文件中

    |   | 2019-06-21 13:13:44.8984 INFO RMD_LPCB_Web_Portal.Program.Main  init main
    |   | 2019-06-21 13:13:48.5197 WARN Microsoft.AspNetCore.HttpsPolicy.Internal.HttpsLoggingExtensions.FailedToDeterminePort  Failed to determine the https port for redirect.
    |   | 2019-06-21 13:13:54.3064 INFO RMD_LPCB_Web_Portal.Pages.Account.LoginModel+<AuthenticateEmail>d__20.MoveNext  LOGIN : Jesse.lay@state.nm.us IP: ::1 SESSION : f52d9758-bc32-7131-d7d4-7ec5224853f5
    |   | 2019-06-21 13:13:54.4070 INFO RMD_LPCB_Web_Portal.Pages.Account.LoginModel.AuthenticateActiveDirectory  Jesse.lay AD
    |   | 2019-06-21 13:13:54.4432 INFO RMD_LPCB_Web_Portal.Pages.Account.LoginModel.AuthenticateActiveDirectory  Jesse.lay AD logged in
    |   | 2019-06-21 13:13:54.4432 INFO RMD_LPCB_Web_Portal.Pages.Account.LoginModel+<AuthenticateEmail>d__20.MoveNext  LOGIN : Jesse.lay@state.nm.us IP: ::1 SESSION : f52d9758-bc32-7131-d7d4-7ec5224853f5
    |   | 2019-06-21 13:13:54.4603 INFO RMD_LPCB_Web_Portal.Pages.Account.LoginModel+<OnPostAsync>d__17.MoveNext  User Jesse.Lay@state.nm.us logged in at 6/21/2019 7:13:54 PM.
    |   | 2019-06-21 13:13:57.2319 ERROR RMD_LPCB_Web_Portal.Pages.Eoc.IndexModel.OnGet     at RMD_LPCB_Web_Portal.Pages.Eoc.IndexModel.OnGet() in C:\usr\tfs_Workspace\TSSB\RMD LPCB\Apps\RMD LPCB Web Portal\Source\RMD_LPCB_Web_Portal\Pages\Eoc\Index.cshtml.cs:line 44
    |   | 2019-06-21 13:13:58.6918 ERROR Microsoft.AspNetCore.Diagnostics.Internal.DiagnosticsLoggerExtensions.UnhandledException  An unhandled exception has occurred while executing the request.
Run Code Online (Sandbox Code Playgroud)

Jul*_*ian 6

你可以用

  • ${event-properties:EventId}- 将打印名称EventId或如果为空,则打印EventId
  • ${event-properties:EventId_Id} - 打印 ID
  • ${event-properties:EventId_Name} - 打印名称

请注意,默认情况下不记录空事件 id - 即 id = 0 或名称(如果为空字符串或 null)。

如果您需要空事件ID,则该选项设置IgnoreEmptyEventId,以false在设置:

loggerFactory.AddNLog(new NLogProviderOptions { IgnoreEmptyEventId = false });
Run Code Online (Sandbox Code Playgroud)

为了完整起见,一些可能的记录器调用:

loggerFactory.AddNLog(new NLogProviderOptions { IgnoreEmptyEventId = false });
Run Code Online (Sandbox Code Playgroud)

  • 这在 NLog 5 中发生了变化:现在 ${event-properties:EventId} 仅打印事件 id 编号,${event-properties:EventName} 打印事件 id 名称。不再支持 EventID_Id 和 EventID_Name。请参阅:https://nlog-project.org/2021/08/25/nlog-5-0-preview1-ready.html (5认同)