<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 147  文章 - 71  trackbacks - 0
    <2015年1月>
    28293031123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    常用鏈接

    留言簿(1)

    隨筆分類(146)

    隨筆檔案(147)

    文章分類(28)

    文章檔案(28)

    喜歡的Blog

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    引起log4j:ERROR Failed to rename的原因
    根據Log4J的配置文件,使用LOG4J的DailyRollingFileAppender.java實現每隔一段時間記錄一次日志文件,但LOG4J在對原文件改名時,總是提示log4j:ERROR Failed to rename的錯誤,究其原因,主要是還有進程在使用原來的LOG文件,而通過分析LOG4J的源碼,發現LOG4J是采用RENAME的方式對原來的LOG文件改名再生成新文件。

    引起log4j:ERROR Failed to rename的條件
    通常都是在配置文件采用Java代碼
    log4j.appender.A1=org.apache.log4j.DailyRollingFileAppender
    或者 
    log4j.appender.A1=org.apache.log4j.RollingFileAppender
    的情況下遇到"異常"提示。

    和異常相關的log4j源代碼
    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是改名,在不同目錄下是移動”,所以在對一個被其他線程所鎖定的文件進行改名時,肯定是會報錯的。

    解決辦法
    修改log4j的源代碼, 將
    boolean result = file.renameTo(target);
    改為
    boolean result = copy(file, target);
    然后再添加copy()方法。
    /**  
    * Copies src file to dst file. If the dst file does not exist, it is  
    * created.8KB cache  
    *   
    @param src  
    @param dst  
    @throws IOException  
    */  
    boolean copy(File src, File dst) throws IOException {
        
    try {
            InputStream in 
    = new FileInputStream(src);

            OutputStream out 
    = new FileOutputStream(dst);   

                    
    // Transfer bytes from in to out   
                    byte[] buf = new byte[8192];   
                    
    int len;   
                    
    while ((len = in.read(buf)) > 0) {   
                out.write(buf, 
    0, len);   
                    }
                    in.close();   
                    out.close();   
                    
    return true;   
                } 
    catch (FileNotFoundException e) {   
                        LogLog.error(
    "源文件不存在,或者目標文件無法被識別." );   
                        
    return false;   
                } 
    catch (IOException e) {   
                    LogLog.error(
    "文件讀寫錯誤.");   
                    
    return false;   
        }
    }

    附件:DailyRollingFileAppender.zip
    posted on 2011-11-10 11:48 飛翔天使 閱讀(8641) 評論(1)  編輯  收藏 所屬分類: log4j

    FeedBack:
    # re: log4j:ERROR Failed to rename錯誤解決辦法[未登錄] 2015-01-21 14:51 bobo
    謝謝樓主,問題解決!  回復  更多評論
      

    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 亚洲视屏在线观看| 日本亚洲中午字幕乱码| 久久不见久久见中文字幕免费| 亚洲香蕉在线观看| 亚洲午夜精品一级在线播放放 | 免费人成网站永久| 亚洲av日韩av高潮潮喷无码 | 亚洲人成在线观看| 日韩免费在线观看| 青青草原1769久久免费播放| 亚洲日韩国产精品乱-久| 久久影视国产亚洲| 中文字幕无码不卡免费视频| 搜日本一区二区三区免费高清视频 | 九九免费精品视频在这里| 久久久无码精品亚洲日韩蜜臀浪潮| 蜜桃视频在线观看免费网址入口| 精品无码国产污污污免费网站国产| 亚洲日韩在线视频| 亚洲一区二区三区香蕉| 日韩人妻无码免费视频一区二区三区| 日韩精品无码免费专区午夜 | 久久国产高潮流白浆免费观看| 青青视频免费在线| 亚洲av乱码一区二区三区香蕉| 亚洲永久无码3D动漫一区| 日本免费人成黄页网观看视频| 久久国产高潮流白浆免费观看| 国产精品免费久久久久影院| 亚洲av无一区二区三区| 亚洲乱人伦精品图片| 亚洲国产另类久久久精品| 国产一级淫片免费播放电影| 99在线精品视频观看免费| 久久99热精品免费观看牛牛| 一区二区三区免费视频观看| 亚洲AV一区二区三区四区| 自拍偷区亚洲国内自拍| 亚洲国产精品日韩在线观看| 久久久久亚洲AV无码专区体验| 亚洲一区精品无码|