`

可恶的log4j:ERROR Failed to rename终于搞定了

阅读更多

      在Tomcat6下使用Log4j记录日志,遇到一个烦心的问题,就是每天创建新日志文件时(日志文件设置为:org.apache.log4j.DailyRollingFileAppender)报:log4j:ERROR Failed to rename错误; 错误 出现 之后,最可恶的事情也随之而来,不但没有把前一天的日志 保存好 ,而是把前面所有日志统统给覆盖掉,气的你会吐血

 

      经过一翻查找,最终知道导致这一错误的罪魁祸首是在Tomcat server.xml中所设置的<Context docBase="xxxx" path="/" reloadable="true"/>所导致的,由于加了这一设置,日志文件始终被其占有,所以当log4j对日志文件进行rename时,就发生了Failed to rename错误

 

     由于log4j在实现日志文件备份时使用的是file.renameTo(File)方法:

File file = new File(fileName);   
    boolean result = file.renameTo(target);

    if(result) {   
      LogLog.debug(fileName +" -> "+ scheduledFilename);   
    } else {   
      LogLog.error("Failed to rename ["+fileName+"] to ["+scheduledFilename+"].");   
    }  
 

 

     而File类的renameTo方法的作用是:”改名或者移动文件作用;在同一个目录下renameTo是改名,在不同目录下是移动",所以在对一个被其他线程所锁定的文件进行改名时,肯定是会报错的。

 

    为解决这一错误, 想来想去最终还是采用了http://duanni.iteye.com/blog/177271 的解决方案,修改了log4j源码,把file.renameTo(File)方法更改成copy文件了,算是解决了问题。不过还是有点担心,就像icefox_wjx 所说的一样,仍然无法预料操作系统会不会出现什么样的情况,如不允许文件copy等等;最终希望能有高人给出更好的解决方案。

 

分享到:
评论
7 楼 梅花簪 2013-05-02  
梅花簪 写道
没有放到webapp下也出现同样的问题

有没有解决的方法
6 楼 梅花簪 2013-05-02  
没有放到webapp下也出现同样的问题
5 楼 h521999 2009-08-15  
遇到问题应该反过头来想想,为什么日志文件一定要放至webapp目录下呢。呵呵。
4 楼 gembler 2009-08-14  
3 楼 Jathon_hs 2009-08-14  
是啊,别放在webapp目录下,我前几天也在弄日志的东西,放在webapp目录几天又改到其他地方去了
2 楼 h521999 2009-08-14  
joyfun 写道
很简单呀 日志不要放在webapp下面呀 放外部路径不就行了嘛?

噫,是哦,是种办法,回头赶紧试试。
1 楼 joyfun 2009-08-13  
很简单呀 日志不要放在webapp下面呀 放外部路径不就行了嘛?

相关推荐

    log4j:ERROR Failed to rename

    解决log4j:ERROR Failed to rename, win系统占用文件无法改名字的问题

    kafka 解决log4j:ERROR Failed to rename错误解决办法错误的jar包

    log4j:ERROR Failed to rename

    log4j修改源码后解决log4j:ERROR Failed to rename错误解决办法错误的jar包

    log4j:ERROR Failed to rename错误解决办法,修改源码里的DailyRollingFileAppender类,用此jar包就不会再出现ERROR Failed to rename的错误了

    log4j:ERROR Failed to rename错误解决办法

    log4j:ERROR Failed to rename错误; 网上查找了下原因,大概意思是日志文件始终被占有,所以当log4j对日志文件进行rename时,就发生了Failed to rename错误 。要修改log4j的源码,附件是我修改好后的,方便大家...

    解决log4j:ERROR Failed to rename代码包

    log4j:ERROR Failed to rename错误解决办法 http://www.blogjava.net/DreamAngel/archive/2011/11/10/363400.html

    Tomcat6下Log4j的log4j:ERROR Failed to rename错误解决办法

    包括修改后的[color=darkred]org.apache.log4j.DailyRollingFileAppender[/color]类的源代码和已编译好的文件. 请用DailyRollingFileAppender.class替换log4j-1.2.15.jar包里相应的类. 博文链接:...

    log4j-1.2.15.jar

    针对log4j:ERROR Failed to rename的问题,修改源代码中的DailyRollingFileAppender.java文件,将rename改为copy。 该log4j-1.2.15.jar,就是修改后的jar包。 已经过测试,可以正常生成日志文件。

    log4j-1.2.16.jar

    log4j:ERROR Failed to rename错误; 网上查找了下原因,大概意思是日志文件始终被占有,所以当log4j对日志文件进行rename时,就发生了Failed to rename错误 。要修改log4j的源码,附件是我修改好后的,方便大家...

    用CFile::Rename给文件改名

    本文将详细讲解如何使用CFile::Rename成员函数来实现文件的改名操作,以及涉及到的相关知识点。 首先,CFile是MFC提供的一种类,用于封装对文件的基本操作,如打开、关闭、读取、写入等。CFile::Rename方法是该类中...

    请慎用java的File#renameTo(File)方法

    以前我一直以为File#renameTo(File)方法与OS下面的 move/mv 命令是相同的,可以达到改名、移动文件的目的。不过后来经常发现问题:File#renameTo(File)方法会返回失败(false),文件没有移动,又查不出原因,再后来...

    解决git:fatal:Unable to create”…/.git/index.lock” 的错误

    问题描述: 在使用git 进行提交时, 出现上面这个报错, 导致无法提交. 报错大致意思就是创建index.lock文件失败,因为已经存在index.lock文件了. index.lock文件是在.git下面, 而.git是一般是隐藏的, 那么可以通过以下...

    Windows环境下npm install 报错: operation not permitted, rename的解决方法

    前言 最近发现了一个问题,运行 npm ... Error: EPERM: operation not permitted, rename ‘/usr/share/nginx/html/tanteng.me/node_modules/duplexify' -&gt; ‘/usr/share/nginx/html/tanteng.me/node_modules/.duple

    FreeRename5.3.rar

    Freerename是一款功能强大并且操作简便的文件改名工具,没有任何使用限制,可以对所有的文件进行快速方便的重命名。 功能介绍  支持对文件及文件夹进行更名;  可以更改文件及文件夹的属性;  可以更改...

    python解决方案:WindowsError: [Error 2]

    ### Python解决方案:WindowsError: [Error 2] 在使用Python进行文件操作时,经常会遇到一些错误,特别是当涉及到文件系统时。本篇文章将详细介绍如何处理一个常见的错误——`WindowsError: [Error 2]`,并提供一种...

    ORACLE Rename Table的语法

    在 ORACLE 中,重命名(Rename)一个表的命令是 ALTER TABLE old_name RENAME TO new_name,而不是 RENAME old_name TO new_name。 REname 命令只是 SQL*Plus 的命令,不能在其他程序中使用,如果将其放在 Java、...

    Tag Rename3.8.6中文版注册版.rar

    Tag Rename可以重命名MP3音乐,通过MP3音乐内置的TAG标签来重新命名你的歌曲文件,编辑文件夹封面艺术,多文件标签管理器编辑音乐的注释,编辑文件标题艺术家,所属专辑及音乐年份,作曲家及原始艺术家等信息,还...

    求解报错:AttributeError:module ‘os’ has no attribute ‘exit’

    python3 server.py 127.0.0.1 8888 ...AttributeError: module ‘os’ has no attribute ‘exit’ 部分代码入下: from socket import * import sys,os #实现登录 def do_login(s,user,name,addr): for i in user: i

    文件重命名工具rename

    "文件重命名工具rename"是一款历史悠久且功能丰富的应用程序,专门设计用于帮助用户高效地管理和整理他们的文件系统。在数字化时代,文件数量日益庞大,统一、有序的文件命名规则显得尤为重要,而这款工具正好解决了...

Global site tag (gtag.js) - Google Analytics