使用log4net的.NET控制台应用报错:找不到log4net配置段
解决.NET控制台应用log4net“找不到配置段”错误的办法
先给你理清楚:日志能写是因为log4net找不到配置时会自动用默认规则,但你看到的错误是因为配置段没正确注册,或者配置文件没被复制到输出目录。按下面步骤一步步来:
第一步:检查log4net.config的文件属性
右键项目里的log4net.config文件,打开「属性」面板:
- 「复制到输出目录」选择「如果较新则复制」或「始终复制」(不然编译后输出目录里没这个文件,程序当然找不到)
- 「生成操作」设置为「内容」
第二步:给主配置文件注册log4net配置段
如果你的项目里没有app.config,先右键项目→添加→新建项→应用程序配置文件(命名为app.config)。然后打开它,在<configuration>节点最顶部添加配置段注册:
<configSections> <!-- 注册log4net配置段 --> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> </configSections> <!-- 引用外部的log4net配置文件 --> <log4net configSource="log4net.config"/>
第三步:确认代码里的初始化代码
两种常见初始化方式二选一就行:
方式1:用AssemblyInfo.cs标记
打开AssemblyInfo.cs,在文件末尾加一行:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]
方式2:在Program.cs里手动初始化
在Program.cs的Main方法最开头加:
log4net.Config.XmlConfigurator.Configure(new System.IO.FileInfo("log4net.config"));
为什么日志还能写?
log4net有个兜底机制:当找不到指定的配置文件或配置段时,会自动启用默认配置(比如默认输出到控制台或者本地文件),所以你看到的日志是默认配置生成的,不是你自己写的log4net.config里的规则,这点要注意。
内容的提问来源于stack exchange,提问作者Nicolas REY
相关产品推荐
相关产品推荐

