Dot-Net-Core

在 .NET Core 3 中使用 NLog 管理日誌記錄配置

  • November 19, 2020

我在 .NET Core 3.1 輔助服務應用程序中使用 NLog。按照 NLog 的教程,我插入了一個 nlog.config 文件來管理配置。

現在我很困惑,因為我有三點配置日誌記錄:

  1. 在我需要在依賴注入上下文中創建記錄器的程式碼中
// Other code...

services.AddScoped<IApplyJcdsCommandsJob, ApplyJcdsCommandsJob>(provider =>
{
   var loggerFactory = LoggerFactory.Create(builder =>
   {
       builder
           .ClearProviders()
           .AddFilter("Microsoft", Microsoft.Extensions.Logging.LogLevel.Trace)
           .AddFilter("System", Microsoft.Extensions.Logging.LogLevel.Trace)
           .AddFilter("ApplyJcdsCommandsJob", Microsoft.Extensions.Logging.LogLevel.Trace)
           //.AddConsole()
           //.AddEventLog();
           .AddNLog(configuration);
   });

   Microsoft.Extensions.Logging.ILogger logger = loggerFactory.CreateLogger<CommandsJob>();

   return new CommandsJob(logger);
})

// Other code...
  1. 在 appSettings.json
{
 "Logging": {
   "IncludeScopes": false,
   "LogLevel": {
     "Default": "Trace",
     "System": "Trace",
     "Microsoft": "Trace"
   }
 }
}
  1. 在 NLog.config 中

nuget包安裝產生的預設配置文件:

<!-- a section of the config -->
<targets>
   <target xsi:type="File" name="f" fileName="${basedir}/logs/${shortdate}.log"
       layout="${longdate} ${uppercase:${level}} ${message}" />
</targets>

<rules>
   <logger name="*" minlevel="Trace" writeTo="f" />
</rules>
<!-- ... -->

我看到的是,如果我刪除 Nlog.config 文件,將不會創建日誌文件。其他更改接縫沒有效果。

這些配置有什麼關係?打開/關閉日誌記錄和設置級別的最佳方法是什麼?

決定使用 NLog 的人通常還希望禁用所有 MEL 過濾以避免與兩個過濾系統混淆。所以NLog wiki-tutorial是針對這些使用者的。

我猜首先是 MEL 使用者的人可能只會使用new HostBuilder().CreateDefaultBuilder().Build()(將在啟用所有槍支的情況下設置所有內容)。

但是,如果繼續使用簡單範例,則需要刪除:

loggingBuilder.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);

並添加:

loggingBuilder.AddConfiguration(config.GetSection("Logging"));

所以它看起來像這樣:

serviceCollection.AddLogging(loggingBuilder =>
{
  loggingBuilder.ClearProviders();
  loggingBuilder.AddConfiguration(config.GetSection("Logging"));
  loggingBuilder.AddNLog(config);
})

ILoggingBuilder.AddConfiguration可以在 Nuget 中找到:Microsoft.Extensions.Logging.Configuration

引用自:https://stackoverflow.com/questions/59648290