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

C# Windows Forms项目使用独立log4net.config无法生成日志文件

问题根因

你改用独立配置文件后不生效是存在3处遗漏配置/操作:

  • 没有显式告知log4net加载独立的log4net.config文件,放在app.config中时框架会自动读取配置节,独立文件需要手动指定加载逻辑
  • 没有设置log4net.config文件的复制属性,导致编译后程序运行目录下不存在该配置文件
  • 独立log4net.config保留了仅适用于app.config的<configuration>、<configSections>外层节点,格式不符合独立配置文件要求
解决步骤

1. 修正log4net.config文件结构

删掉外层的<configuration>和<configSections>节点,直接以<log4net>作为根节点,修正后内容如下:

<?xml version="1.0" encoding="utf-8" ?>
<log4net>
  <appender name="FileAppender" type="log4net.Appender.FileAppender">
    <staticLogFileName value="true"/>
    <file type="log4net.Util.PatternString" value="Logs\%date{MMddHH}\%property{LogName}.log" />
    <appendToFile value="true" />
    <encoding value="utf-8" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger > %method > %message%newline" />
    </layout>
  </appender>
  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file value="log.txt" />
    <!--<file type="log4net.Util.PatternString" value="Logs\%date{MMddHH}\%property{LogName}" />-->
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="_yyyyMMdd HH'.log'"/>
    <maxSizeRollBackups value="1" />
    <maximumFileSize value="2KB" />
    <staticLogFileName value="true" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
    </layout>
  </appender>
  <root>
    <level value="ALL" />
    <appender-ref ref="RollingFileAppender" />
  </root>
</log4net>

2. 设置配置文件属性

在解决方案资源管理器中右键log4net.config文件,选择「属性」,修改两个属性:

  • 生成操作:选择「无」
  • 复制到输出目录:选择「如果较新则复制」

3. 新增配置加载逻辑

两种方式二选一即可:

方式1:添加程序集特性

打开项目下Properties文件夹中的AssemblyInfo.cs,在末尾添加一行特性:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

Watch = true代表运行时修改配置文件会自动重载,无需重启程序。

方式2:启动时显式加载

在程序入口最开始的位置加载配置,比如在Program.cs的Main方法第一行添加:

log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));

也可以放在Form1构造函数InitializeComponent();之前添加。

额外检查项
  • 运行后到bin\Debug或bin\Release目录下确认存在log4net.config文件
  • 如果你后续取消注释带%property{LogName}的路径配置,需要在日志写入前给该属性赋值:log4net.GlobalContext.Properties["LogName"] = "自定义日志名";
  • 确认程序对运行目录有写入权限

内容的提问来源于stack exchange,提问作者Mario Luigi Vibal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 15:36:01