.NET Framework 4.7.2下log4net 2.0.12创建日志文件但无日志写入求助
问题:log4net 2.0.12升级后日志无条目写入(.NET Framework 4.7.2)
我们的C#应用基于.NET Framework 4.7.2运行,使用log4net多年一直稳定。但升级到2.0.12版本后,出现日志无法写入的问题:删除旧日志文件后会生成新文件,但没有任何日志条目写入。
App.config中的log4net配置
<log4net> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file type="log4net.Util.PatternString" value="Log\WMS4_Server_Log.xml" /> <appendToFile value="true" /> <rollingStyle value="Size" /> <maxSizeRollBackups value="5" /> <maximumFileSize value="10MB" /> <staticLogFileName value="true" /> <layout type="log4net.Layout.XmlLayoutSchemaLog4j"> <locationInfo value="true" /> </layout> </appender> <root> <level value="ALL" /> <appender-ref ref="RollingFileAppender" /> </root> </log4net>
已尝试的操作
- 曾在Main()方法中添加
log4net.Config.XmlConfigurator.Configure();,问题暂时解决但现已复发 - 已启用log4net内部日志,但未获取到有效排查线索
- 若问题无法解决,考虑替换日志组件
排查思路
1. 确认配置加载的正确性
- 检查
XmlConfigurator.Configure()的调用时机,确保在所有日志实例创建之前执行,比如放在Main方法最开头;或者用[assembly: log4net.Config.XmlConfigurator(Watch=true)]特性替代代码调用,避免初始化顺序问题 - 在代码中输出
log4net.LogManager.GetRepository().Configured的值,确认配置已成功加载
2. 权限与文件锁定检查
- 虽然能生成新文件,仍需确认应用对Log目录的完整写入权限(比如部分场景下文件生成后权限被系统或安全工具修改)
- 用Process Explorer等工具查看日志文件的句柄,确认无第三方进程锁定文件
- 尝试将日志路径改为绝对路径(比如
C:\Logs\WMS4_Server_Log.xml),避免相对路径解析错误
3. 深化log4net内部日志排查
- 确保内部日志配置正确,建议输出到独立文件,配置示例:
<appSettings> <add key="log4net.Internal.Debug" value="true"/> </appSettings> <system.diagnostics> <trace autoflush="true"> <listeners> <add name="textWriterTraceListener" type="System.Diagnostics.TextWriterTraceListener" initializeData="log4net_internal.log"/> </listeners> </trace> </system.diagnostics> - 重点查看内部日志中是否有
XmlLayoutSchemaLog4j相关的错误,比如序列化异常、字段兼容性问题,2.0.12版本可能对XML布局做了调整
4. 版本兼容性验证
- 暂时降级到之前稳定的log4net版本(比如2.0.11),确认问题是否由版本升级直接导致
- 检查.NET Framework 4.7.2与log4net 2.0.12的兼容性,确认是否存在框架API调用的兼容问题
5. 日志实例与级别校验
- 确认代码中日志实例是通过
log4net.LogManager.GetLogger(typeof(YourClass))正确获取,而非自定义实例 - 在代码中手动触发不同级别的日志(比如
logger.Debug("Test Debug")、logger.Error("Test Error")),验证是否所有级别都无法写入 - 检查配置中是否存在其他logger节点覆盖了root节点的
ALL级别设置
内容的提问来源于stack exchange,提问作者stopa
相关产品推荐
相关产品推荐

