首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用NLog管理.NET Core 3中的日志配置

用NLog管理.NET Core 3中的日志配置
EN

Stack Overflow用户
提问于 2020-01-08 14:45:23
回答 2查看 16K关注 0票数 11

我在一个NLog核心3.1Worker服务应用程序中使用.NET。在NLog教程之后,我插入了一个nlog.config文件来管理配置。

现在我很困惑,因为我有三个点来配置日志记录:

  1. 在代码中,我需要在依赖项注入上下文中创建记录器。 //其他代码..。services.AddScoped(provider => { var loggerFactory = LoggerFactory.Create(builder => { builder .ClearProviders() .AddFilter) .AddFilter("Microsoft",Microsoft.Extensions.Logging.LogLevel.Trace) .AddFilter("System",Microsoft.Extensions.Logging.LogLevel.Trace) .AddFilter("ApplyJcdsCommandsJob“),Microsoft.Extensions.Logging.LogLevel.Trace) //..AddConsole()//..AddEventLog();.AddNLog(配置);};Microsoft.Extensions.Logging.ILogger记录器= loggerFactory.CreateLogger();返回新的CommandsJob(记录器);}) //其他代码.
  2. 在appSettings.json中 {“日志”:{ "IncludeScopes":false,"LogLevel":{“默认”:“跟踪”,“系统”:“跟踪”,“微软”:“跟踪”}}
  3. 在NLog.config中 nuget包安装生成的默认配置文件:

我看到的是,如果删除Nlog.config文件,日志文件将不会被创建。其他改变缝没有效果。

这些配置是如何关联的?打开/关闭日志并设置级别的最佳方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-01-16 20:27:51

决定使用NLog的人通常也希望禁用所有的MEL过滤,以避免与两个过滤系统混淆。因此,NLog wiki教程就是针对这些用户的。

我想那些最先使用new HostBuilder().CreateDefaultBuilder().Build()的人可能只会使用(会在所有的枪支都启用的情况下设置所有的东西)。

但是,如果继续使用简单的示例,则需要删除:

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

并增加:

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

看起来是这样的:

代码语言:javascript
复制
serviceCollection.AddLogging(loggingBuilder =>
{
   loggingBuilder.ClearProviders();
   loggingBuilder.AddConfiguration(config.GetSection("Logging"));
   loggingBuilder.AddNLog(config);
})

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

票数 10
EN

Stack Overflow用户

发布于 2020-01-08 20:20:56

AddNLog和其他任何(MEL) LoggingProvider一样注册NLog (类似于AddConsole)。

这意味着NLog只获得已被“批准”的日志输出。因此,在MEL中配置的任何筛选都将阻止日志事件到达NLog。

NLog仍然能够基于Logger名称和LogLevel-严重性重定向到想要的NLog-目标。

您可以决定是使用MEL筛选还是NLog过滤,还是两者结合使用。但是,如果您只想使用“纯”NLog,那么只需创建一个NLog.Extensions.Logging.NLogLoggerFactory实例。它是一个专门的ILoggerFactory,它忽略了MEL过滤配置。

顺便说一句。为每个Commands作业实例创建一个孤立的LoggerFactory有点奇怪。会认为您将在依赖项注入框架中注册该类型,并让它注入构造函数参数。还请参阅此示例:

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

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

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59648290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档