【发布时间】:2010-12-27 22:11:55
【问题描述】:
我正在使用 C# 提供 SDK。要启用现场调试,我想使用 log4net 进行日志记录。由于程序集是 dll,如何在不使用 App.config 的情况下启用配置?
谢谢,
【问题讨论】:
我正在使用 C# 提供 SDK。要启用现场调试,我想使用 log4net 进行日志记录。由于程序集是 dll,如何在不使用 App.config 的情况下启用配置?
谢谢,
【问题讨论】:
考虑使用 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-micro/
【讨论】:
您也可以考虑将 Common.Logging 用于 .Net 抽象。
http://netcommon.sourceforge.net/
Common.Logging 开箱即用地支持 log4net、NLog 和 Enterprise Library。如果需要,很容易编写自己的适配器以与 Common.Logging 一起使用。
这样,您的 SDK 就变得与日志平台无关。您的用户仍需要 app.config 或 web.config 中的条目来指示要使用的平台,但特定于平台的配置仍可以存储在单独的文件中。
【讨论】: