一、问题描述
1、大家在用log4j时,可能会遇到下面的一个报错信息:
Failed to rename [/opt/proj.log] to [/opt/proj.log.2014-03-20].
这个算是log4j.DailyRollingFileAppender的一个BUG,网上很多修改方案,不过我能搜到的,都不理想。
2、一般性问题:文件重命名失败
详细的内容可以参见论坛的帖子:
关键内容如下:
我也遇到了和LZ相同的问题,也是无法重命名,但是可以先重命名,然后再执行其他操作!如果先执行其他的操作,比如读这个文件,然后再修改这个文件名字,就无法重命名了,我先把代码贴出来了,大家帮忙了啊!!
你这个只是单纯的为文件重命名,没进行其他的操作,现在的问题是,进行了其他的读写流之类的操作,然后重命名操作失败了!只是单纯的重命名,大家都能成功的!!
二、解决方案
在我写这篇文章之前,还没有真正地有效解决这个问题。
我的解决方案是这样的:
第一步:
先把原文件copy一份,copy的那份就命名为要重命名的文件。
比如proj.log,我拷贝一份,命名成proj.2014-03-20.log
第二步:
本来我的思路是这样的:删除原proj.log,然后再新建一个proj.log
但是我发现,原proj.log文件不但无法重命名,而且无法删除。
所以,我换了种思路:直接打开proj.log的输入流,然后把它的文件内容清空。
总结一下,变相的文件重命名思路:直接上代码,参见注释。