【发布时间】:2013-06-16 02:50:18
【问题描述】:
尝试使用 Log4Net 将日志记录添加到应用程序。
我可能完全误解了这个框架的用途以及它是如何工作的,但我想做的是有一个自定义外观类,在它下我实际上启动了我的 log4net 实例和哪个(这就是麻烦) 默认情况下使用单个配置文件,如果需要,可以由使用该类的应用程序覆盖。
所以我创建了一个自定义的 Log4NetLogger 类和它的接口:
public class Log4NetLogger : ILogging
{
private ILog _logger;
public Log4NetLogger()
{
log4net.Config.XmlConfigurator.Configure();
_logger = LogManager.GetLogger(this.GetType());
string meh = string.Empty;
}
//interface methods for error, warn, info etc
}
在包含我的 Log4NetLogger 类的项目的 AssemblyInfo.cs 中,我添加了:
[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.config", Watch = true)]
我在项目中添加了一个看起来有点像这样的 Log4Net.config 文件:
<log4net>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
<!-- various gubbins -->
<root>
<level value="ALL" />
<appender-ref ref="AdoNetAppender" />
</root>
</log4net>
并且在编译时设置为“始终复制”,因此在任何引用它的项目的 bin 文件夹中都应该有它的副本。
现在,在一个测试类中,我添加了对该项目的引用并完成了以下操作:
Log4NetLogger logger = new Log4NetLogger();
logger.Info("started");
什么都不做。
在调试器中单步执行代码,很明显 Log4Net 没有获取配置文件。日志管理器发回的记录器已将所有级别设为禁用。
但是,如果您将相同的配置部分添加到我的测试项目的 web.config 中,它就可以工作。但我真的不想在解决方案中的每个配置文件中添加大量相同的 appender 配置。
我做错了什么,我的方法有什么问题吗?最好的前进方式是什么?
干杯, 马特
【问题讨论】:
-
我建议 1) 将 bufferSize 设置为 1,这样事件就不会被缓冲 2) 请参阅 stackoverflow.com/a/6353064/43846
标签: log4net log4net-configuration