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

          由于最近在使用 log4net 纪录文件日志,但是每天产生的日志比较多,所以就需要按天来生产日志文件,也就是说,一天有一个日志文件,以 yyyyMMdd_log.txt 的格式来命名,这样有利于日志管理,所以对 log4net 进行了改进,以支持此项功能。经过修改后,我多了个配置属性 dateOn ,这是一个开关,用来设置是否支持按日期产生日志文件, true 为支持, false 为不支持。
None.gif < appender name = " FileAppender "  type = " log4net.Appender.FileAppender " >
None.gif        
< file value = " log-file.txt " />
None.gif        
< dateOn value = " true " />
None.gif        
< appendToFile value = " true "   />
None.gif        
< layout type = " log4net.Layout.PatternLayout " >
None.gif            
< conversionPattern value = " %date [%thread] %-5level %logger [%ndc] - %message%newline "   />
None.gif        
</ layout >
None.gif
</ appender >

修改的文件有: FileAppender.cs , AppenderAttachedImpl.cs , XmlHierarchyConfigurator.cs
FileAppender.cs 的修改如下:
1)  增加两个属性,如下:
None.gif private   bool  m_dateOn;
ExpandedBlockStart.gifContractedBlock.gif        
/**/ /// <summary>
InBlock.gif        
/// 功能:当为真时,日志将以日期为单位来命名日志文件
ExpandedBlockEnd.gif        
/// </summary>

None.gif          public   bool  DateOn
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get dot.gifreturn m_dateOn; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set dot.gif{ m_dateOn = value; }
ExpandedBlockEnd.gif        }

None.gif        
private   string  m_logFileName;
ExpandedBlockStart.gifContractedBlock.gif        
/**/ /// <summary>
InBlock.gif        
/// 日志文件名
ExpandedBlockEnd.gif        
/// </summary>

None.gif          public   string  LogFileName
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get dot.gifreturn m_logFileName; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set dot.gif{ m_logFileName = value; }
ExpandedBlockEnd.gif        }
2)修改方法:ActivateOptions() 把m_fileName换成m_logFileName
3)   修改方法:Reset()  把m_fileName换成m_logFileName
AppenderAttachedImpl.cs的修改如下:
1)添加方法,如下:
ExpandedBlockStart.gif ContractedBlock.gif /**/ /// <summary>
InBlock.gif        
/// 产生日志文件名
InBlock.gif        
/// </summary>
ExpandedBlockEnd.gif        
/// <returns></returns>

None.gif          private   string  CreateLogName()
ExpandedBlockStart.gifContractedBlock.gif        
dot.gif {
InBlock.gif            
return DateTime.Now.ToString("yyyyMMdd");
ExpandedBlockEnd.gif        }

2)修改方法:AppendLoopOnAppenders(LoggingEvent loggingEvent) 在代码:appender.DoAppend(loggingEvent);前面添加如下代码:
None.gif if (appender.Name  ==   " FileAppender " )
ExpandedBlockStart.gifContractedBlock.gif                    
dot.gif {
InBlock.gif                        
if(((FileAppender)(appender)).DateOn) //是否打开以日期来产生日志文件的功能
ExpandedSubBlockStart.gifContractedSubBlock.gif
                        dot.gif{
InBlock.gif                            ((FileAppender)(appender)).LogFileName 
= this.CreateLogName()+"_"+((FileAppender)(appender)).File;
ExpandedSubBlockEnd.gif                        }

InBlock.gif                        
else
ExpandedSubBlockStart.gifContractedSubBlock.gif                        
dot.gif{
InBlock.gif                            ((FileAppender)(appender)).LogFileName 
= ((FileAppender)(appender)).File;
ExpandedSubBlockEnd.gif                        }

InBlock.gif                        ((FileAppender)(appender)).ActivateOptions();
ExpandedBlockEnd.gif                    }

XmlHierarchyConfigurator.cs的修改如下:
1)修改方法:ParseAppender(XmlElement appenderElement) 把原来的代码:
None.gif IOptionHandler optionHandler  =  appender  as  IOptionHandler;
None.gif                    
if  (optionHandler  !=   null
ExpandedBlockStart.gifContractedBlock.gif                    
dot.gif {
InBlock.gif                        optionHandler.ActivateOptions();
ExpandedBlockEnd.gif                    }
替换成如下的代码:(过滤掉FileAppender)
None.gif if (appender.Name  !=   " FileAppender " )
ExpandedBlockStart.gifContractedBlock.gif                
dot.gif {
InBlock.gif                    IOptionHandler optionHandler 
= appender as IOptionHandler;
InBlock.gif                    
if (optionHandler != null
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        optionHandler.ActivateOptions();
ExpandedSubBlockEnd.gif                    }

ExpandedBlockEnd.gif                }
这样,log4net的改进就完成了。改进后感觉挺好用的,呵呵!
以上是个人的改进心得,希望给有同样需求的朋友有所帮助!

转载于:https://www.cnblogs.com/rijing2004/archive/2006/04/19/379404.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值