.NET Core如何禁用内置日志仅通过log4net输出日志
问题原因
.NET Core通用主机默认会注册一组内置日志提供程序,控制台输出提供程序就在默认注册列表里。你代码中调用builder.Logging.AddLog4Net("log4net.config")的逻辑,只是在现有日志提供程序集合里追加了log4net输出渠道,没有移除默认的控制台提供程序,因此同一条日志会被两个独立的提供程序分别输出到控制台,最终出现重复打印的现象。
修复方案
修改Program.cs中的日志配置代码,在注册log4net之前先清空所有默认注册的日志提供程序:
// 清空所有默认注册的日志提供程序,移除内置的控制台、调试窗口等输出渠道 builder.Logging.ClearProviders(); // 仅注册log4net作为唯一的日志提供程序 builder.Logging.AddLog4Net("log4net.config");
注意事项
- 如果后续需要额外增加调试日志、事件日志等其他输出渠道,在
ClearProviders()方法之后单独调用对应提供程序的注册方法即可,不要恢复默认的全量提供程序注册。 - 调整后所有日志输出规则完全由你的log4net.config控制:根日志级别为WARN、控制台附加器阈值为INFO,输出格式统一为你配置的
%date [%thread] %level %logger - %message%newline格式。 - 修复后启动项目,不会再出现
info: Microsoft.Hosting.Lifetime[0]这类微软默认格式的系统日志,业务代码输出的日志也不会再重复打印两份。
内容的提问来源于stack exchange,提问作者user3533755
相关产品推荐
相关产品推荐

