【问题标题】:Log4Net inside facade not recognising config门面内的 Log4Net 无法识别配置
【发布时间】: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 配置。

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

干杯, 马特

【问题讨论】:

标签: log4net log4net-configuration


【解决方案1】:

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

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

    _logger = LogManager.GetLogger(this.GetType());
    string meh = string.Empty;
 }

【讨论】:

  • 谢谢 - 这帮助我确定了问题所在,即它在错误的位置查找配置文件:它默认为 C:\Windows\SysWOW64\inetsrv。这就引出了一个问题,即如何确保它在 bin 文件夹中的任何位置运行。
  • 您可以使用类似System.IO.Path.Combine(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location), "Log4Net.config"); System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Log4Net.config"); 的名称构建文件名,请参阅stackoverflow.com/questions/837488/…
【解决方案2】:

您需要有一个 appender 部分,您可以在其中配置日志记录的保存位置。你也可以参考这个链接Log4net does not write the log file

【讨论】:

  • 谢谢,但我确实有一个 appender 部分。我把它排除在上面的问题之外,因为我认为它不相关 - 只要将配置数据添加到 using application 而不是 门面应用
  • Adi appender 取决于您使用的数据库及其正确的配置设置。首先尝试使用文件附加程序并确保它正在记录到文件。然后更改为 DB appender。每个数据库都需要适当的配置设置,您可以参考logging.apache.org/log4net/release/config-examples.html
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-10
相关资源
最近更新 更多