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");
}
}

运行后,可看到其他的配置项依然有效。




posted @ 2012-03-05 15:54  hwqqxczx  阅读(2360)  评论(7)    收藏  举报