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

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

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

    隨筆 - 147  文章 - 71  trackbacks - 0
    <2011年11月>
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    常用鏈接

    留言簿(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 飛翔天使 閱讀(8645) 評論(1)  編輯  收藏 所屬分類: log4j

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

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


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 国产免费人成视频在线播放播| 久久99精品国产免费观看| 亚洲av片在线观看| 亚洲一区二区三区免费观看| 亚洲一区二区三区日本久久九| 亚洲伊人久久大香线蕉AV| 久久av免费天堂小草播放| 亚洲日本韩国在线| 精品人妻系列无码人妻免费视频| 国产AⅤ无码专区亚洲AV| 亚洲人成电影在线观看青青| 五月婷婷在线免费观看| 亚洲av无码片区一区二区三区| 免费无码国产在线观国内自拍中文字幕| 国产免费爽爽视频免费可以看| 国产亚洲精品美女2020久久 | aaa毛片视频免费观看| 国产亚洲午夜高清国产拍精品| 亚洲综合无码无在线观看| 最近最新中文字幕完整版免费高清| 亚洲粉嫩美白在线| 四虎免费影院4hu永久免费| 一区二区免费国产在线观看| 亚洲AV无码精品色午夜果冻不卡| 免费观看无遮挡www的视频| 亚洲日韩一中文字暮| 无码精品A∨在线观看免费| 亚洲不卡av不卡一区二区| 日韩内射激情视频在线播放免费| 亚洲制服丝袜第一页| 亚洲精品动漫人成3d在线| 久久国产乱子伦精品免费一| 亚洲最大的黄色网| 亚洲国产精品第一区二区三区| 国产亚洲sss在线播放| 亚洲欧洲日产国码一级毛片| 99久久精品国产免费| 视频一区二区三区免费观看| 免费国产人做人视频在线观看| 亚洲AV日韩综合一区尤物| 亚洲伊人久久成综合人影院|