自定义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();
      希望这篇文章能帮到和我有一样需求的人。
posted @ 2009-08-27 18:36  百利  阅读(3546)  评论(0编辑  收藏  举报