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

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

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


    網站導航:
     
    主站蜘蛛池模板: 可以免费观看的一级毛片| 最近免费中文字幕视频高清在线看 | 亚洲国产精品视频| 免费高清A级毛片在线播放| 青青青青青青久久久免费观看| 亚洲一本一道一区二区三区| 97无码免费人妻超级碰碰碰碰| 亚洲1区1区3区4区产品乱码芒果 | 中文字幕av免费专区| 在线播放亚洲第一字幕| APP在线免费观看视频| 亚洲免费视频在线观看| AV无码免费永久在线观看| 亚洲免费福利在线视频| 国产精品另类激情久久久免费| 男性gay黄免费网站| 亚洲乱码无码永久不卡在线| 久久国产精品一区免费下载| 亚洲精品福利网站| 麻豆精品国产免费观看| 人妻免费久久久久久久了| 日韩亚洲人成在线综合日本| 5g影院5g天天爽永久免费影院| 亚洲伊人久久大香线蕉| 国产免费人成视频在线观看 | 特级做A爰片毛片免费69 | 亚洲aⅴ无码专区在线观看春色| 免费在线观看a级毛片| 国产拍拍拍无码视频免费| 亚洲不卡在线观看| 亚洲av区一区二区三| 亚洲免费视频在线观看| 亚洲午夜理论片在线观看| av在线亚洲欧洲日产一区二区| 永久免费av无码入口国语片| 亚洲人成电影网站久久| 亚洲熟女乱综合一区二区| 免费无码又爽又刺激高潮视频| 亚洲AV永久无码精品一福利| 亚洲成av人在线视| 在线看片人成视频免费无遮挡|