一、問題描述
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的輸入流,然後把它的檔案内容清空。
總結一下,變相的檔案重命名思路:直接上代碼,參見注釋。