Log4Net和GAC - 如何引用配置文件?

时间:2010-04-22 02:01:26

标签: log4net gac

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

日志记录定义位于Log4Net.xml文件中。该文件在我的assemblyinfo中被引用为:[assembly:log4net.Config.XmlConfigurator(ConfigFile =“Log4Net.xml”,Watch = true)]。只要xml文件与log4net.dll位于同一目录中,一切都运行良好。

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

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

非常感谢

2 个答案:

答案 0 :(得分:3)

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

 System.AppDomain.CurrentDomain.BaseDirectory

让您的应用程序将此信息打印到某个文件,然后您知道放置配置文件的位置。

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

答案 1 :(得分:0)

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

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

<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);