无论我使用DailyRollingFileAppender还是RollingFileAppender,log4j总是不能很好的给我备份上一个日志文件。在使用DailyRollingFileAppender的时候总是提示:
log4j:ERROR Failed to rename [c:\tomcat/logs/importlog] to [c:\tomcat/logs/impor
tlog200601241834].原因正在是使用的日志文件"c:\tomcat/logs/importlog"确实被某个程序使用着,又怎么能改名呢?
导致“c:\tomcat/logs/importlog”不断被刷新(根据DatePattern),旧的日志记录不断消失,达不到备份的目的。只有当重起tomcat的时候,它才会给我备上一份...原因tomcat启动之时“c:\tomcat/logs/importlog”并没有程序使用。附上配置:
<appender name="R" class="org.apache.log4j.DailyRollingFileAppender">
<param name="File" value="${catalina.base}/logs/importlog"/>
<param name="DatePattern" value="yyyyMMddHHmm" />
...
请教怎么解决?

解决方案 »

  1.   

    除了log4j还有其他程序用这个日志文件?
      

  2.   

    没有。应该只有log4j.
    上述情况出现在我自己的web应用中,即配置文件位于 $MY_WEBAPP/WEB-INF/或者$MY_WEBAPP/WEB-INF/classes下。而我尝试过使用log4j取代tomcat自己的日志记录,即配置文件放在 $CATALINA_HOME/common/classes下面,滚动文件就没有问题,真是奇怪。
      

  3.   

    问题是正在使用的日志文件(即还没有改名备份的那个、日期时间最新的那个)在log4j对他进行"rename to"操作时出错。如果是Rolling文件,它(log_name.log)将会被rename to "log_name.log.1";
    如果是DailyRolling文件它(log_name.log)将会被rename to "log_name.logyyyy-mm-dd";
    等等出错就在rename时,当时磁盘并不存在"log_name.log.1"或"log_name.logyyyy-mm-dd"等重名文件的。而事实上我想手动修改log_name.log文件名为"abcxyz"时,系统报告文件正在被使用,我猜想是log4j锁住了他,但至于为什么会锁住,我就不知道了。
      

  4.   

    是不是杀毒软件作怪?log4j 自己应该知道自己干了什么,你说的锁住了不太可能。
      

  5.   

    不会是杀毒软件的问题,请看
    “上述情况出现在我自己的web应用中,即配置文件位于 $MY_WEBAPP/WEB-INF/或者   $MY_WEBAPP/WEB-INF/classes下。  而我尝试过使用log4j取代tomcat自己的日志记录,即配置文件放在   $CATALINA_HOME/common/classes下面,滚动文件就没有问题,真是奇怪。”