<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永久免费| 亚洲国产高清人在线| 久久久久免费看黄a级试看| 亚洲AV无码成人精品区蜜桃| 免费毛片在线看不用播放器| 亚洲国产精品高清久久久| 久久久精品免费国产四虎| 亚洲AV美女一区二区三区| 四虎国产精品永久免费网址| 亚洲综合一区二区精品久久| 91免费国产在线观看| 亚洲美国产亚洲AV| mm1313亚洲国产精品美女| 中文字幕不卡免费视频| 亚洲欧洲国产日韩精品| 国产一精品一AV一免费孕妇 | 久久久亚洲精品视频| 一级毛片成人免费看免费不卡| 久久精品国产亚洲AV电影| 97在线视频免费公开观看| 亚洲a∨无码男人的天堂| 日韩成人在线免费视频| 永久免费观看黄网站| 亚洲AV永久无码精品成人| 免费观看美女用震蛋喷水的视频| 亚洲а∨精品天堂在线| 亚洲毛片不卡av在线播放一区| 精品国产污污免费网站| 亚洲国产模特在线播放| 国产免费小视频在线观看| 99久久国产精品免费一区二区| 亚洲国产成a人v在线| 伊人久久亚洲综合影院| 久久久久久成人毛片免费看| 一本色道久久综合亚洲精品蜜桃冫| 日韩视频免费在线| 今天免费中文字幕视频| 国产偷国产偷亚洲清高APP| 亚洲码国产精品高潮在线|