log4net实现自定义文件名称
第一次写blogs,多多见谅
在开发中碰到一个需求,需要动态更改log4net日志名称,之前看了这篇动态修改log4net组件的日志文件名,发现实现了日志名称的修改,但操作较为复杂,且当更改后存在其他配置无效的bug。后来通过网上搜索和自己研究,暂时有个较好较简单的方案
我这里以一个控制台程序来说明。
1.首先需要配置log4net。
引用log4net.dll组件。并在AssemblyInfo.cs里写入以下代码,使得之后的app.config中的log4net配置和dll组件存在联系。
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
[assembly: log4net.Config.Repository]
创建app.config,写入以下配置信息,配置信息不做说明了,在配置中可看到 {dynamicName},动态名就基于此了。
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections>
<log4net>
<root>
<level value="ALL" />
<appender-ref ref="RollingLogFileAppender" />
</root>
<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
<file type="log4net.Util.PatternString" value="log\File_%property{dynamicName}.txt" />
<appendToFile value="false" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10"/>
<maximumFileSize value="1024KB"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
</log4net>
2.使用log4net控件。
在使用前,写一个log4net载入前的方法,可对log4net全局信息中的刚才定义的dynamicName的属性进行赋值的方法
private static void InitLogger(string name)
{
log4net.GlobalContext.Properties["dynamicName"] =name;
}
最后使用这个方法即可
private static ILog Logger;
static void Main(string[] args)
{
InitLogger(“test”);
Logger = LogManager.GetLogger("Process");
for (int i = 0; i < 50000; i++)
{
Logger.Info("aaa");
}
}
运行后,可看到其他的配置项依然有效。

浙公网安备 33010602011771号