Dot-Net-Core
在 .NET Core 3 中使用 NLog 管理日誌記錄配置
我在 .NET Core 3.1 輔助服務應用程序中使用 NLog。按照 NLog 的教程,我插入了一個 nlog.config 文件來管理配置。
現在我很困惑,因為我有三點配置日誌記錄:
- 在我需要在依賴注入上下文中創建記錄器的程式碼中
// 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...
- 在 appSettings.json
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Trace", "System": "Trace", "Microsoft": "Trace" } } }
- 在 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