我们正在使用log4net并希望在外部配置文件中指定它的配置(正如我们对其他部分所做的那样).为此,我们将App.config中的log4net部分更改为:
...
...
...
在Log.Config文件(与App.config相同的目录)中,我们有:
但是,当我们运行应用程序时,不会创建任何日志文件(并且没有完成日志记录).没有错误消息输出到控制台.
如果我们将Log.config文件的内容移回App.config(替换上面的第一个代码行),它将按预期工作.知道为什么它不在外部文件中工作吗?
您的AssemblyInfo.cs
文件中是否包含以下属性:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
和类似这样的代码在每个类的开头需要日志记录功能:
private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
我有一个包含此和其他信息博客文章在这里.
这个问题存在缺陷.Log4Net不支持配置元素的configSource属性.要使用纯配置文件解决方案,请使用appSettings中的log4net.Config键.
第1步:包括正常的配置部分定义:
第2步:在appSettings中使用magic log4net.Config键.
第3步:提供补丁以修复configSource的处理.
错过的步骤是
log4net.Config.XmlConfigurator.Configure();
这将导致使用configSource.确保在调用GetLogger()之前调用一次;
确保使用以下属性设置log4net.config文件:
构建行动:内容
复制到输出目录:始终复制
使用,
要不就,
log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo("Log4Net.config"));
在这两种情况下,文件Log4Net.config都应该在输出目录中.您可以通过在解决方案资源管理器中设置Log4Net.config文件属性来执行此操作.构建操作 - 内容和复制到输出目录 - 始终复制