我相信您正在尝试重新发明轮子,有几种工具可以从您的代码中抽象出记录器,从而将记录器框架与您的代码解耦:
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
in 代码,因为它对我来说更简单,只需将几个应用程序设置添加到我的像这样的配置文件
<!-- Relative to the application root path -->
<add key="log4net.Config" value="Logger.log4net"/>
<add key="log4net.Config.Watch" value="True"/>
就是这样。这些应用程序设置会覆盖您的 log4net 配置,并且易于维护。您的配置文件将如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<!-- This section contains the log4net configuration settings -->
<log4net>
<!-- Define some output appenders -->
<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>
<!-- Setup the root category, add the appenders and set the default priority -->
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
要配置更多附加程序:单击此处
在您的项目中,您只需要对记录器抽象组件的引用,只需在 Web 项目(或 Windows 应用程序,它是相同的)中添加 log4net 配置文件和那些应用程序设置
由于您正在创建一个可重用的组件,我建议您在组织中设置一个内部 Nuget 服务器(它只是一个 IIS 应用程序)并使用它来部署您的组件,在这种情况下是包含记录器的库。此外,如果您创建一个仅包含应用程序设置和 log4net 配置文件的不同 Nuget 包会更好,因此您只能在您的 Web 项目中安装此 Nuget 包