我相信你正在尝试重新发明轮子,有几种工具可以将记录器从您的代码中抽象出来,将记录器框架与您的代码解耦:
http://slf.codeplex.com/
http://netcommon.sourceforge.net/
这些是.NET应用程序中最常见的。
如果你坚持使用自己的抽象(这是有效的),这是我的建议:
首先,我假设你会有类似以下的内容:
interface ILogger
{
void Debug(string message);
void Info(string message);
void Warn(string message);
…..
}
好的,所以在你的代码中,你需要注入一个单例引用来记录器,例如:
x.For<ILogger>().Singleton().Use<MyLogger>();
现在,我通常更喜欢约定优于配置,但是在记录器的情况下,通过配置文件进行配置是一个巨大的优势,因为当您的代码处于生产状态时,有时需要通过禁用或启用记录器、更改日志级别和启用/禁用命名记录器来更改日志记录规则。
我发现实现这一点最简单和最可重复的方法是将配置放置在外部文件中,正如您所评论的那样,然后我不必在代码中调用XmlConfigurator,因为对我来说,只需向我的配置文件添加一些应用程序设置即可,如下所示。
<!
<add key="log4net.Config" value="Logger.log4net"/>
<add key="log4net.Config.Watch" value="True"/>
就是这样。这些应用程序设置将覆盖您的log4net配置,并且易于维护。您的配置文件将如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<log4net>
<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
<file value="webapp-log.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
要配置更多的附加程序:点击这里
在您的项目中,您只需要引用日志记录器抽象组件,并且只需在Web项目(或Windows应用程序,它们是相同的)中添加log4net配置文件和那些应用程序设置
由于您正在创建可重用组件,因此我建议您在组织中设置一个内部Nuget服务器(它只是一个IIS应用程序),并将其用于部署您的组件,例如包含日志记录器的库。此外,最好创建一个不同的Nuget包,仅包含应用程序设置和log4net配置文件,以便您只能在Web项目中安装此Nuget包。
ILog
上创建一些扩展方法。 - default.kramer