改进log4net支持按日期产生日志文件

          由于最近在使用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.csAppenderAttachedImpl.csXmlHierarchyConfigurator.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的改进就完成了。改进后感觉挺好用的,呵呵!
以上是个人的改进心得,希望给有同样需求的朋友有所帮助!

posted on 2006-04-19 18:04  today  阅读(5308)  评论(17编辑  收藏  举报

导航

09夏旅游鞋代购专柜正品打折李宁/LINING男跑鞋休闲球鞋