【问题标题】:Log4Net and GAC - How to reference Configuration Files?Log4Net 和 GAC - 如何引用配置文件?
【发布时间】:2014-04-24 03:11:20
【问题描述】:

我在开发过程中使用 log4net,作为项目约束的一部分,我现在需要将其添加到全局程序集缓存中。

日志记录定义在文件 Log4Net.xml 中。该文件在我的 assemblyinfo 中被引用为:[assembly: log4net.Config.XmlConfigurator(ConfigFile = "Log4Net.xml", Watch = true)]。只要 xml 文件与 log4net.dll 在同一目录下,一切正常。

但是,现在我已将 log4net 添加到 GAC,它不再拾取 xml 文件。

有谁知道我需要更改什么才能让它再次获取 XML 文件?在程序集引用中硬编码补丁是唯一的方法吗?

非常感谢

【问题讨论】:

    标签: log4net gac


    【解决方案1】:

    log4net 期望配置文件位于以下返回的路径中:

     System.AppDomain.CurrentDomain.BaseDirectory
    

    让您的应用程序将此信息打印到某个文件,然后您就知道需要将配置文件放在哪里。

    当然还有其他解决方案,但是你不能再使用该属性了。直接调用 ConfigureAndWatch() 方法可以让你自己弄清楚配置文件在哪里;您甚至可以决定一个位置(不必是硬编码路径)。

    【讨论】:

      【解决方案2】:

      您可以确保将 log4net.xml 文件设置为“始终复制”(右键单击 log4net.xml -> 属性 -> 复制到输出目录 = 始终复制)。为确保您的配置文件被复制,您应该检查您的 bin\debug 或 bin\release 目录并验证 log4net.xml 文件是否存在于您的应用程序执行的同一目录中。

      如果这不起作用,那么您可以尝试在 log4net 中启用内部调试。要启用内部调试,请将以下键添加到您的 app.config 文件中。这会将内部 log4net 调试消息发送到您的 Visual Studio 输出窗口(查看 -> 输出)。

      <configuration>
        <appSettings>
          <add key="log4net.Internal.Debug" value="true"/>
        </appSettings>
      </configuration>
      

      有关 log4net 内部调试的更多信息,您可以查看 Phil Haack 的博文here

      如果一切都失败了,您可以打开内部调试并通过调用 log4net 的 XmlConfigurator.ConfigureAndWatch 方法显式加载配置。

      var fi = new FileInfo(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) + "\\log4net.xml");
      XmlConfigurator.ConfigureAndWatch(fi);
      

      【讨论】:

      • 非常感谢您和 Stefan,你们在这里给了我很多选择。谢谢你的帖子。
      猜你喜欢
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-13
      相关资源
      最近更新 更多