WinForms解决方案中的多个项目和可配置记录器名称的通用log4net配置文件的最佳实践

时间:2013-01-01 19:12:57

标签: c# log4net

  

可能重复:
  Correct way to reference log4net DLL in WinForms application

我的WinForms解决方案有2个项目:1个用于项目特定代码,另一个用于可重用代码。我从两个项目中引用log4net.dll。我已将dll保存在主解决方案文件夹下的libs文件夹中,并从两个项目中引用此DLL。注意:这是一个物理文件夹,而不是解决方案文件夹。

我想在单个xml文件中指定log4net配置设置,这两个项目都可以读取。

  1. 我在哪里保留此xml文件?
  2. 如何指向log4net XmlConfigurator从此xml文件中读取?
  3. 如果我不想对xml文件名和路径进行硬编码,有哪些选项?

  4. (可选问题)假设我不想遵循使用完全限定类名作为记录器名称的约定;而是在运行时我想从xml文件中读取每个类的记录器名称(目的是隔离外部文件中的父子记录器关系并在以后决定);那有什么选择呢?

  5. 我正在使用C#2.0。

    虽然这听起来像很多问题,但对于经验丰富的log4net开发人员来说,它们应该很简单!我想是这样的!

    编辑1:我不想在app.config文件中混合使用log4net config。

    感谢。

1 个答案:

答案 0 :(得分:1)

我想我找到了解决方案。

  1. 我现在将XML文件保存在Project的项目文件夹中,该文件夹标记为Startup Project。在Project的File属性中,我将“Copy to Output Directory”设置为“Copy if newer”

  2. 我使用程序集级别属性将log4net XmlConfiguration指向此XML文件:

    [assembly:log4net.Config.XmlConfigurator(ConfigFile =“LogConfig.xml”,Watch = true)]

  3. 目前我已在上述属性中对文件名进行了硬编码。如果以后我不想硬编码,我可以在app.config文件的appSettings部分插入一个log4net.Config键。

  4. 如果我想从xml文件中读取每个类的记录器名称,我可以在app.config文件中为每个完全限定的类名插入适当的键,然后从那里读取。

  5. 如果有人有其他想法,请发帖。