在SDK中使用log4net

我正在使用C#提供SDK。 要启用字段调试,我想使用log4net包含日志记录。 如何在不使用App.config的情况下启用配置,因为程序集将是一个DLL?

谢谢,

考虑使用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(); 

您可以将配置放在代码中,但不建议使用。

更好地使用外部文件发送dll,或者添加代码 – 如果文件存在,则使用它,如果不存在,则使用硬编码配置。

为什么不通过提供记录器的抽象来使您的SDK日志平台不可知? Caliburn.Micro执行此操作,本文介绍了它的工作原理以及客户端如何配置他们希望使用的相应记录器 – http://buksbaum.us/2010/08/08/how-to-do-logging-with -caliburn微/

您也可以考虑使用Common.Logging进行.Net抽象。

http://netcommon.sourceforge.net/

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

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