。NET Core 3中使用NLog管理日志记录配置

问题描述 投票:0回答:2

我正在.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文件,将不会创建日志文件。其他更改接缝无效。

此配置如何关联?开启/关闭日志记录并设置级别的最佳方法是什么?

.net-core nlog ilogger
2个回答
0
投票

引用此URL。您将获得有关ASP Net Core中Nlog的完整信息

https://www.c-sharpcorner.com/article/introduction-to-nlog-with-asp-net-core2/


0
投票

[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有点奇怪。会认为您将在依赖项注入框架中注册该类型,并让其注入构造函数参数。另请参见以下示例:

https://github.com/NLog/NLog.Extensions.Logging/blob/master/examples/NetCore2/ConsoleExample/Program.cs

其中LoggerFactory用AddLogging(...)创建,并且Runner在ServiceCollection中注册以进行依赖项注入。当创建Runner的实例时,依赖项注入将自动提供ILogger作为构造函数参数。

© www.soinside.com 2019 - 2024. All rights reserved.