【问题标题】:Use log4net in SDK在 SDK 中使用 log4net
【发布时间】:2010-12-27 22:11:55
【问题描述】:

我正在使用 C# 提供 SDK。要启用现场调试,我想使用 log4net 进行日志记录。由于程序集是 dll,如何在不使用 App.config 的情况下启用配置?

谢谢,

【问题讨论】:

    标签: c# dll sdk log4net


    【解决方案1】:

    考虑使用 XmlConfigurator 为 log4net 配置独立的配置文件位置。您可以使用此技术提供独立的基于文件的配置,而无需触摸 app\web.config 或对其进行硬编码。示例:

    http://haacked.com/archive/2005/03/07/ConfiguringLog4NetForWebApplications.aspx

    更新

    尝试以下引导程序来配置独立配置文件。它将构建一个完整的路径。如果仍然无法找到路径,请尝试注销路径。

    public static class LogFactory
    {
        public const string ConfigFileName = "log4net.config";
    
        public static void Configure()
        {
            Type type = typeof(LogFactory);
            FileInfo assemblyDirectory = AssemblyInfo.GetCodeBaseDirectory(type);
            string path = Path.Combine(assemblyDirectory.FullName, ConfigFileName);
            FileInfo configFile = new FileInfo(path);
            XmlConfigurator.ConfigureAndWatch(configFile);
            log4net.ILog log = LogManager.GetLogger(type);
            log.ToString();
        }
    }
    

    呼叫:

    LogFactory.Configure();
    

    【讨论】:

    • 我正在尝试该建议,但没有记录任何内容。所以我进入源代码。原因如下:
    • 我正在尝试使用上述链接中的确切步骤的建议,但没有记录任何内容。所以我进入源代码。原因如下: configElement =System.Configuration.ConfigurationSettings.GetConfig("log4net") as XmlElement;配置功能仍在寻找我没有的应用程序配置文件中的“log4net”部分。任何想法为什么它没有选择我自己单独的 log4net.config 文件?谢谢。
    • 是的。我想我应该能够通过调用 log4net.Config.XmlConfigurator.Configure(new FileInfo("log4net.config")) 来指定我的配置文件来克服。但是目前 VS 内置单元测试框架没有拾取这个文件。
    • @Icerman 我已经在我的答案中添加了一个配置例程,它将为配置文件构建一个完整路径。
    • @Icerman 这就是我的怀疑。您正在使用命名记录器而不是记录到它。我用通用配置替换了它。嘘!乐意效劳。我赢得了那个代表! :)
    【解决方案2】:

    你可以把配置放在代码里,虽然不推荐。

    最好将 dll 与外部文件一起发布,或者添加代码 - 如果文件存在,则使用它,如果不存在,则使用硬编码配置。

    【讨论】:

      【解决方案3】:

      为什么不通过提供记录器的抽象来使您的 SDK 日志平台不可知? Caliburn.Micro 做到了这一点,本文描述了它的工作原理以及客户端如何配置他们希望使用的适当记录器 - http://buksbaum.us/2010/08/08/how-to-do-logging-with-caliburn-micro/

      【讨论】:

        【解决方案4】:

        您也可以考虑将 Common.Logging 用于 .Net 抽象。

        http://netcommon.sourceforge.net/

        Common.Logging 开箱即用地支持 log4net、NLog 和 Enterprise Library。如果需要,很容易编写自己的适配器以与 Common.Logging 一起使用。

        这样,您的 SDK 就变得与日志平台无关。您的用户仍需要 app.config 或 web.config 中的条目来指示要使用的平台,但特定于平台的配置仍可以存储在单独的文件中。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-07-19
          • 2014-04-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-23
          相关资源
          最近更新 更多