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=9645>.
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=9645

Add rolloverPath attribute to DailyRollingFileAppender

           Summary: Add rolloverPath attribute to DailyRollingFileAppender
           Product: Log4j
           Version: 1.2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: Enhancement
          Priority: Other
         Component: Appender
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


I would like to suggest a new attribute "rolloverPath" be added to the 
DailyRollingFileAppender class.  In short, the rolloverPath (configurable via a 
property) could point to a new location to which rolled-over files could be 
copied.  The code samples below illustrate how we have implemented this 
feature.  For brevity’s sake, I’ve included code snippets instead of the entire 
org.apache.log4j.DailyRollingFileAppender.java file that we've enhanced.  The 
sample code should be read in the context of Log4J 1.2.2 
DailyRollingFileAppender.java source.

First, I added the following Javadoc:
* <p>An optional <code>rolloverPath</code> may be specified such 
* that files that are rolled over will be created in the location
* specified by this path.  Any parent path information in the original
* logfile name is ignored when the rollover occurs. 
* <code>rolloverPath</code> may be absolute or relative. 
*
* If in the previous example the <code>rolloverPath</code> is set to 
* <code>/archive</code>, the logging file <code>/foo/bar.log</code>
* will be copied to <code>/archive/bar.log.2001-02-16</code> and 
* logging will continue normally.
*/


Added new attributes:
/**
 * Pathname and directory (File object) used if files are to archive to
 * a different location than where the lof file is created.
 */
private String rolloverPath;
private File rolloverDir;

    
Added a new constructor:
/**
 * Instantiate a <code>DailyRollingFileAppender</code> and open the
 * file designated by <code>filename</code>.  Files that are rolled 
 * over are archived to the location specified by the
 * <code>rolloverPath</code>
 */
public DailyRollingFileAppender(Layout layout, String rolloverPath, 
  String filename, String datePattern)
                                                 throws IOException {
    this( layout, filename, datePattern );
        
    setRolloverPath( rolloverPath );
}

Also added the setRolloverPath() method:
/**
 * Sets the location to which log files will be rolled over .  If the
 * given path already exists, it must be writable and must be a
 * directory.  If it doesn't exist, it will get created, along with any
 * necessary, non-existent parent directories.
 */
public void setRolloverPath( String pathName ) {
    rolloverPath = pathName;
    rolloverDir = new File( rolloverPath );

    // Check to see if the rollover path exists (needs to be created) 
    // and if we can write to it.
    if ( rolloverDir.exists() ) {
        if ( !rolloverDir.isDirectory() ) {
            LogLog.warn( "The path name " + pathName + " does not refer to a 
directory." );
            rolloverDir = null;
        }
        else if ( !rolloverDir.canWrite() ){
            LogLog.warn( "Unable to write to directory " + 
  rolloverDir.getAbsolutePath() );
            rolloverDir = null;
        }
            
    }
    else if ( !rolloverDir.mkdirs() ) {
        LogLog.warn( "Unable to create rollover directory for " + 
    rolloverPath );
        rolloverDir = null;
    }
}


Updated the rollover() method:
.
.
.
/* If rolloverDir was specified, ignore any path information in
 * the original filename and use the rolloverPath instead. */
// File target  = new File(scheduledFilename); // Original code
File target;
if ( rolloverDir == null ) {
    target = new File( scheduledFilename );
}
else {
    target = new File( rolloverDir, 
                      (new File(scheduledFilename)).getName() );
}
.
.
.    
//LogLog.debug(fileName +" -> "+ scheduledFilename); // Original code
LogLog.debug(fileName +" -> "+ target.getPath());
.
.
.

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to