1

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

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

干杯,马特

4

2 回答 2

2

您应该能够从中删除属性条目AssemblyInfo.cs并更改构造函数以传入文件名。

public Log4NetLogger()
{
    log4net.Config.XmlConfigurator.ConfigureAndWatch(
       new System.IO.FileInfo("Log4Net.config"));      

    _logger = LogManager.GetLogger(this.GetType());
    string meh = string.Empty;
 }
于 2013-06-19T21:08:57.933 回答
0

您需要有一个 appender 部分,您可以在其中配置日志记录的保存位置。你也可以参考这个链接Log4net 不写日志文件

于 2013-06-19T14:13:53.253 回答