You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-dev@logging.apache.org by bu...@apache.org on 2002/09/26 11:09:20 UTC

DO NOT REPLY [Bug 13021] New: - DailyRollingFileAppender - change renameTo

DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=13021>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=13021

DailyRollingFileAppender - change renameTo

           Summary: DailyRollingFileAppender - change renameTo
           Product: Log4j
           Version: 1.2
          Platform: PC
        OS/Version: Other
            Status: NEW
          Severity: Minor
          Priority: Other
         Component: Appender
        AssignedTo: log4j-dev@jakarta.apache.org
        ReportedBy: emilc77prof@softhome.net


reason:
there may be another application that reads the log (a viewer), with 
RanomAccessFile (set on "R"). When you try to renameTo(), program fails to 
rename, and bye-bye the backup file;
The same problem we encountered with RollingFileAppender

I Propose:
replace renameTo()... with copy(); the backup file is created all the times.

present code:

boolean result = file.renameTo(target);
if(result) {
LogLog.debug(fileName +" -> "+ scheduledFilename);
} else {
LogLog.error("Failed to rename ["+fileName+"] to ["+scheduledFilename+"].");
}

proposed code:

// copy file content to target instead of renaming it
java.io.BufferedReader in = null;
java.io.BufferedWriter out = null;
try {
    if (getEncoding() == null) {
        in = new java.io.BufferedReader(new java.io.FileReader(file));
        out = new java.io.BufferedWriter(new java.io.FileWriter(target));
    } else {
        in = new java.io.BufferedReader(new java.io.InputStreamReader( new 
java.io.FileInputStream(file), getEncoding()));
        out = new java.io.BufferedWriter(new java.io.OutputStreamWriter( new 
java.io.FileOutputStream(target), getEncoding()));
    }
    int length;
    String line;
    while ((line = in.readLine()) != null) {
        if (line.length() != 0) {
            out.write(line);
        }
        out.newLine();
    }
    LogLog.debug(fileName +" -> "+ scheduledFilename);
}catch(java.io.IOException exc){
    LogLog.error("Failed to copy [" + fileName + "] to [" + scheduledFilename 
+ "].");
    // exc.printStackTrace();
} finally {
    if (out != null) {
        out.close();
    }
    if (in != null) {
        in.close();
    }
}

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>