我正在.NET Core 3.1辅助服务应用程序中使用NLog。在NLog教程之后,我插入了nlog.config文件来管理配置。
现在,我很困惑,因为在配置日志记录时有三点:
1. In the code where I need to create a logger in a dependency injection
context
// 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...
2. In appSettings.json
{
"Logging": {
"IncludeScopes": false,
"LogLevel": {
"Default": "Trace",
"System": "Trace",
"Microsoft": "Trace"
}
}
}
3. in NLog.config
The default config file produced by the nuget package installation:
<!-- 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文件,将不会创建日志文件。其他更改接缝无效。
此配置如何关联?开启/关闭日志记录并设置级别的最佳方法是什么?
引用此URL。您将获得有关ASP Net Core中Nlog的完整信息
https://www.c-sharpcorner.com/article/introduction-to-nlog-with-asp-net-core2/
[AddNLog
像其他任何Microsoft Extension Logger(MEL)LoggingProvider一样注册NLog(类似于AddConsole
)。
这意味着NLog仅获得MEL-ILogger“批准”的日志输出。因此,在MEL中配置的任何过滤都将阻止日志事件到达NLog。
NLog仍具有基于Logger名称和LogLevel严重性重定向到所需NLog目标的功能。
您可以决定是否要使用MEL筛选或NLog筛选,或两者结合使用。但是,如果您只想使用“纯” NLog,则只需创建NLog.Extensions.Logging.NLogLoggerFactory
的实例。它是专门的ILoggerFactory,忽略MEL-Filtering-Configuration。
顺便说一句。您为每个CommandsJob实例创建一个隔离的LoggerFactory有点奇怪。会认为您将在依赖项注入框架中注册该类型,并让其注入构造函数参数。另请参见以下示例:
其中LoggerFactory用AddLogging(...)
创建,并且Runner
在ServiceCollection中注册以进行依赖项注入。当创建Runner
的实例时,依赖项注入将自动提供ILogger
作为构造函数参数。