You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 00:22:38