Log4net输出未知DEBUG日志,纯C#代码配置下如何去除?
解决log4net代码配置下的未知DEBUG日志问题
这种情况我之前也碰到过!那些额外的DEBUG static Execute类日志,大概率是log4net自身的内部调试输出,或者是你项目里引用的其他组件也在使用log4net,并且继承了你设置的根Logger配置。下面给你几个靠谱的解决办法:
1. 关闭log4net内部调试日志
log4net默认在某些场景下会输出自身的调试信息,你需要在初始化log4net之前就关闭这个功能:
// 一定要在配置log4net之前设置 log4net.Util.LogLog.InternalDebugging = false;
这一步能直接干掉log4net自己输出的调试日志。
2. 精准控制Logger范围,避免根Logger过度开放
很多人配置的时候会直接给根Logger(LogManager.GetRootLogger())设置Appender和低级别日志,这会导致所有引用log4net的组件都能输出日志。正确的做法是:
- 给你自己的命名空间/类创建专属Logger
- 把根Logger的日志级别设为
OFF或者ERROR,只允许你自己的Logger输出日志
示例代码:
// 初始化配置 var hierarchy = (log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository(); hierarchy.Configured = true; // 配置根Logger:禁止所有默认输出 var rootLogger = hierarchy.Root; rootLogger.Level = log4net.Core.Level.OFF; // 创建你自己的Logger(比如对应你的项目命名空间) var myLogger = hierarchy.LoggerFactory.CreateLogger("MyAppNamespace"); myLogger.Level = log4net.Core.Level.Debug; // 这里设你需要的级别 hierarchy.AddLogger(myLogger); // 创建文件Appender并配置 var fileAppender = new log4net.Appender.RollingFileAppender { Name = "MyFileAppender", File = "myapp.log", AppendToFile = true, RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Size, MaxSizeRollBackups = 5, MaximumFileSize = "10MB", StaticLogFileName = true, Layout = new log4net.Layout.PatternLayout("%date %level %logger - %message%newline") }; fileAppender.ActivateOptions(); // 只把Appender关联到你自己的Logger myLogger.AddAppender(fileAppender);
3. 给Appender添加过滤器(可选)
如果上面的方法还不够保险,你可以给Appender添加过滤器,只允许特定Logger的日志通过:
// 添加Logger匹配过滤器 var filter = new log4net.Filter.LoggerMatchFilter { LoggerToMatch = "MyAppNamespace", AcceptOnMatch = true }; // 添加拒绝所有其他日志的过滤器 var denyAllFilter = new log4net.Filter.DenyAllFilter(); // 把过滤器添加到Appender fileAppender.AddFilter(filter); fileAppender.AddFilter(denyAllFilter); fileAppender.ActivateOptions();
这样只有MyAppNamespace这个Logger的日志会被写入文件,其他任何来源的日志都会被过滤掉。
最后检查点
- 确保你代码里所有日志输出都是用
LogManager.GetLogger("MyAppNamespace")或者LogManager.GetLogger(typeof(YourClass))来获取Logger实例,而不是直接用根Logger - 检查项目引用的第三方库,有没有哪个库也在使用log4net,如果有的话,上面的配置会自动屏蔽它们的日志输出
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

