C# 在dll中配置log4net日志记录

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

我正在设置一个dll,用作其他应用程序的第三方dll。我希望这个dll有自己的日志记录,这样外部应用程序就不必进行任何设置(我不相信他们使用的日志记录与我们相同)。我读到这可能不是最好的解决方案,但这是我被赋予的任务。我们想用log4net来处理这个问题。我已经看了这里的一些其他问题,他们提到它可以通过代码进行配置,但是,我遇到的主要问题是,在我们的代码中没有明确的入口点来配置log4net。我很好奇,我是否应该放弃让dll自行配置,而是让配置dll日志的辅助应用程序调用一个方法,或者是否有更好的方法来实现这一点。如果您能以编程方式配置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);
}

您可以通过多种方式配置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中。这有一点开销,但除了在代码中完成这一切,我看不到任何其他方法。从日志记录的角度来看,这有点奇怪,因为他们的日志记录方式与我们不同。谢谢。这就是我们最终要做的,只是从来没有更新过这个问题。