内部的Log4Net无法识别配置

时间:2013-06-19 14:08:32

标签: log4net log4net-configuration

尝试使用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配置。

我做错了什么,我的方法有什么问题,最好的方法是什么?

干杯, 马特

2 个答案:

答案 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

相关问题