.NET Core下如何过滤API调用冗余日志?(NLog配置问题)
.NET Core中过滤API冗余日志的解决方案
我需要在.NET Core中过滤掉API调用产生的冗余日志,避免日志污染。尝试通过appsettings.json配置日志但未生效,目标是完全避免这类日志,或者至少减少Trace/Info级别的输出。项目中Program/Startup使用NLog,其他部分使用Microsoft扩展日志。
Trace日志示例:
更新(原配置及问题)
appsettings.json配置:
"Logging": { "LogLevel": { "Default": "Error", "Microsoft": "Error", "Microsoft.Hosting.Lifetime": "Error", "Microsoft.AspNetCore": "Error" // 原本以为这会生效 }, "EventLog": { "LogLevel": { "Default": "None", "Microsoft": "None", "Microsoft.Hosting.Lifetime": "None" } } },
nlog.config原配置(无效):
<rules> <logger name="*" minLevel="Info" writeTo="file, kafka, console" /> <logger name="Microsoft.AspNetCore*" minLevel="None" final="true" /> </rules> </nlog>
Program代码:
public static void Main(string[] args) { var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, ProjectConstants.FOLDER_CONFIGS); var logger = NLogBuilder.ConfigureNLog(Path.Combine(path, "nlog.config")).GetCurrentClassLogger(); logger.Info("init main"); var builder = new ConfigurationBuilder() .SetBasePath(AppDomain.CurrentDomain.BaseDirectory) .AddJsonFile(Path.Combine(path, "appsettings.json"), true); Configuration = builder.Build(); CreateHostBuilder(args).Build().Run(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseKestrel() .UseConfiguration(Configuration) .UseStaticWebAssets() .UseStartup<Startup>() /* .ConfigureLogging(logging => { logging.ClearProviders(); logging.SetMinimumLevel(LogLevel.Trace); }) */ .UseNLog(); }).UseWindowsService().UseSystemd(); }
API日志仍会自动生成:
<logger name="Microsoft.AspNetCore*" minLevel="None" 配置完全无效。
有效解决方案
感谢Qiang Fu提供的正确配置,修改nlog.config中的<rules>节点为以下内容即可实现需求:
<logger name="Microsoft.*" minLevel="Trace" maxLevel="Info" final="true" /> <logger name="Microsoft.*" minLevel="Warn" maxLevel="Fatal" writeTo="file" final="true" /> <logger name="*" minLevel="Info" writeTo="file, kafka, console" />
内容的提问来源于stack exchange,提问作者Roman
相关产品推荐
相关产品推荐

