【问题标题】:Configure log4net logging in dll在 dll 中配置 log4net 日志记录
【发布时间】:2013-04-02 16:33:04
【问题描述】:

我正在设置一个 dll 以用作不同应用程序的第三方 dll。我希望这个 dll 拥有自己的日志记录,因此外部应用程序不必处理任何设置(我不相信他们使用与我们相同的日志记录)。我读过这可能不是最好的解决方案,但这是我被赋予的任务。我们想用这个来使用 log4net。我在这里查看了其他一些问题,他们提到它可以通过代码进行配置,但是,我遇到的主要问题是我们的代码中没有明确的入口点来配置 log4net。我很好奇我是否应该放弃让dll自行配置并拥有一个由配置dll日志记录的辅助应用程序调用的方法,或者是否有更好的方法来解决这个问题。任何意见将不胜感激

【问题讨论】:

  • 您可以通过多种方式配置 log4net,包括使用 xml 配置文件。您要么需要通过启动方式配置日志记录设置,要么通过 xml 设置文件进行配置。
  • 请澄清 - 您是否想要配置 log4net 以供您的 DLL 中的类使用的示例代码,或者您想要关于在何处/如何从您的 DLL 中调用此示例代码的建议?
  • @PaulF 我不需要示例代码,我目前已经设置并运行它,但我不是该解决方案的忠实拥护者。基本上我有这个:` private void ConfigureLogging() { XmlConfigurator.Configure(new System.IO.FileInfo(string.Format(@"{0}\{1}", System.Environment.CurrentDirectory, LogConfigurationFileName))); }` 这在 dll 的入口点上调用,以确保日志记录知道要使用哪个设置文件。我希望找到比这更好的解决方案。
  • 幸运的是,运行此代码时 log4net 似乎没有重新创建文件,所以现在(我们仍在证明解决方案)这是有效的。
  • 有点痛苦,但我认为配置文件将被添加到其他应用程序的 msi 中。它有点开销,但除了在代码中完成这一切之外,我看不到任何其他方式。从日志记录的角度来看,这有点奇怪,因为他们的日志记录方式与我们不同。

标签: c# dll log4net log4net-configuration


【解决方案1】:

您可以通过编程方式配置 log4net。也许将此代码添加到 DLL 的构造函数中。

if (!log4net.LogManager.GetRepository().Configured)
{
    // my DLL is referenced by web service applications to log SOAP requests before
    // execution is passed to the web method itself, so I load the log4net.config
    // file that resides in the web application root folder
    var configFileDirectory = (new DirectoryInfo(TraceExtension.AssemblyDirectory)).Parent; // not the bin folder but up one level
    var configFile = new FileInfo(configFileDirectory.FullName + "\\log4net.config");

    if (!configFile.Exists)
    {
        throw new FileLoadException(String.Format("The configuration file {0} does not exist", configFile));
    }

    log4net.Config.XmlConfigurator.Configure(configFile);
}

【讨论】:

  • 谢谢。这就是我们最终所做的,只是从未更新过问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-08
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多