由於最近在使用log4net紀錄檔案日誌,但是每天產生的日誌比較多,所以就需要按天來生產記錄檔,也就是說,一天有一個記錄檔,以yyyyMMdd_log.txt的格式來命名,這樣有利於日誌管理,所以對log4net進行了改進,以支援此項功能。經過修改後,我多了個配置屬性dateOn,這是一個開關,用來設定是否支援按日期產生記錄檔,true為支援,false為不支援。<appender name="FileAppender" type="log4net.Appender.FileAppender">
<file value="log-file.txt"/>
<dateOn value="true"/>
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
修改的檔案有:FileAppender.cs,AppenderAttachedImpl.cs,XmlHierarchyConfigurator.cs
FileAppender.cs的修改如下:
1) 增加兩個屬性,如下:private bool m_dateOn;
/**//// <summary>
/// 功能:當為真時,日誌將以日期為單位來命名記錄檔
/// </summary>
public bool DateOn
{
get { return m_dateOn; }
set { m_dateOn = value; }
}
private string m_logFileName;
/**//// <summary>
/// 記錄檔名
/// </summary>
public string LogFileName
{
get { return m_logFileName; }
set { m_logFileName = value; }
}
2)修改方法:ActivateOptions() 把m_fileName換成m_logFileName
3) 修改方法:Reset() 把m_fileName換成m_logFileName
AppenderAttachedImpl.cs的修改如下:
1)添加方法,如下:/**//// <summary>
/// 產生記錄檔名
/// </summary>
/// <returns></returns>
private string CreateLogName()
{
return DateTime.Now.ToString("yyyyMMdd");
}
2)修改方法:AppendLoopOnAppenders(LoggingEvent loggingEvent) 在代碼:appender.DoAppend(loggingEvent);前面添加如下代碼:if(appender.Name == "FileAppender")
{
if(((FileAppender)(appender)).DateOn) //是否開啟以日期來產生記錄檔的功能
{
((FileAppender)(appender)).LogFileName = this.CreateLogName()+"_"+((FileAppender)(appender)).File;
}
else
{
((FileAppender)(appender)).LogFileName = ((FileAppender)(appender)).File;
}
((FileAppender)(appender)).ActivateOptions();
}
XmlHierarchyConfigurator.cs的修改如下:
1)修改方法:ParseAppender(XmlElement appenderElement) 把原來的代碼:IOptionHandler optionHandler = appender as IOptionHandler;
if (optionHandler != null)
{
optionHandler.ActivateOptions();
}
替換成如下的代碼:(過濾掉FileAppender)if(appender.Name != "FileAppender")
{
IOptionHandler optionHandler = appender as IOptionHandler;
if (optionHandler != null)
{
optionHandler.ActivateOptions();
}
}
這樣,log4net的改進就完成了。改進後感覺挺好用的,呵呵!
以上是個人的改進心得,希望給有同樣需求的朋友有所協助!