【发布时间】:2018-05-02 15:43:34
【问题描述】:
基本上,我需要生成多个日志文件。 在我的示例中,我有 2 个记录器 {logger-A,logger-B}。 我发现为每个记录器创建另一个文件附加器很乏味。 如何为多个记录器重复使用 1 个附加程序?
在配置中
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
<logger additivity="false" name="logger-A">
<level value="All"/>
<appender-ref ref="FileAppender" />
</logger>
<logger additivity="false" name="logger-B">
<level value="All"/>
<appender-ref ref="FileAppender" />
</logger>
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" type="log4net.Util.PatternString" value="log\all.txt" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="2MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" />
</layout>
<filter type="log4net.Filter.PropertyFilter">
<Key value="Version" />
<StringToMatch value="1" />
</filter>
</appender>
<appender name="FileAppender" type="log4net.Appender.RollingFileAppender" >
<param name="File" type="log4net.Util.PatternString" value="log\%property{LogName}.txt" />
<param name="AppendToFile" value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="2MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%-5p%d{yyyy-MM-dd hh:mm:ss} – %m%n" />
</layout>
</appender>
</log4net>
在 C# 中
GlobalContext.Properties["LogName"] = string.Format("{0}", loggerName); var logger = LogManager.GetLogger(loggerName);【问题讨论】:
-
你并没有真正提到问题到底是什么。根据您发布的代码,我假设您将获得一个
(null).txt输出日志文件。如果是这种情况,那么您需要在GlobalContext中设置LogName之后调用XmlConfigurator.Configure();。然后,每次您想使用相同的附加程序切换日志文件时再次调用它。丑陋...我宁愿有多个附加程序。 -
LogName 属性将是动态的。例如,我从配置中添加新的 logger-C,我将只使用现有的 FileAppender,它应该创建一个新的日志文件。
-
我们知道
LogName是动态的,但您仍然没有告诉我们运行代码时究竟发生了什么。 -
每个 Logger 应该有单独的日志文件。如果我有 3 个记录器,我希望有 3 个日志文件。