自定义Log4net日志文件名


      最近几天一直在写日志功能,当然用的是log4net。log4net提供一个根据当前系统时间不同而生成不同的文件名称的配置,这个功能确实很好,但却不能用在我们的项目中,我的时间是存储在数据库中的,也就是要动态的改变时间,想了很多方法,都行不通,后来想到我可以动态的修改配置文件啊。只好把log4net的配置文件从web.config中分离出来,名称的后缀最后不要用.config,因为没修改一次就会产生一个垃圾文件,什么原因我不知道。
      问题慢慢的就出现了,我们的解决方案中包含了十几个项目,不可能在每个项目中都添加对log4net程序集的引用吧,所以还需要对它进行简单的封装,放在底层的类库中。同事们从VSS上获取最新版本的log4net的配置文件后,让后编译就会出错,因为文件是只读的,所以在修改前还要加上这句话:
            File.SetAttributes("配置文件的绝对路径", FileAttributes.Normal);
      生成日志做好了,查询的时候又出问题了,因为log4net会根据当前的配置文件,一直占用日志文件,所以在我们查询日志前要先关闭log4net:
            LogManager.Shutdown();
当然再你第二次记录日志的时候确定下面的代码是否运行:
             log4net.Config.XmlConfigurator.ConfigureAndWatch("XXXX");
      方法中的参数是一个FileInfo对象。
      这还真是麻烦,最后没事的时候看了下log4net的源码,发现像我们这些需要修改日志名称的需求,不用配置文件是最好的,下面的代码就可以实现:
        log4net.Layout.PatternLayout layout  =   new  log4net.Layout.PatternLayout( " %d %p %m %n " );
        log4net.Appender.FileAppender appender 
=   new  log4net.Appender.FileAppender(layout,  @" D:\t1.txt " true );
        log4net.Config.BasicConfigurator.Configure(appender);
        ILog log 
=  LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
        log.Info(
" Infoinof " );
        LogManager.Shutdown();
      希望这篇文章能帮到和我有一样需求的人。

转载于:https://www.cnblogs.com/jjbery/archive/2009/08/27/1555276.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值