关于c#:在SDK中使用log4net

Use log4net in SDK

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

谢谢,


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

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

更新

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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();
    }
}

致电:

1
LogFactory.Configure();


您可以将配置放入代码中,尽管不建议这样做。

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


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

http://netcommon.sourceforge.net/

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

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


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