尝试使用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配置。
我做错了什么,我的方法有什么问题,最好的方法是什么?
干杯, 马特
答案 0 :(得分:2)
您应该能够从AssemblyInfo.cs
中删除属性条目,并更改构造函数以传递文件名。
public Log4NetLogger()
{
log4net.Config.XmlConfigurator.ConfigureAndWatch(
new System.IO.FileInfo("Log4Net.config"));
_logger = LogManager.GetLogger(this.GetType());
string meh = string.Empty;
}
答案 1 :(得分:0)
您需要有一个appender部分,您可以在其中配置保存日志记录的位置。您也可以参考此链接Log4net does not write the log file