package org.pollerosoftware.log4j.additions; import java.io.*; import org.apache.log4j.FileAppender; import org.apache.log4j.helpers.LogLog; /** * This class inherit from FileAppender and it is different from * its parent class only in the fact that doen't create the log file * immediately after the initialization, but only at the first write * operation (Lazy log file creation). * * @author Alessio Pollero * @version 1.0 */ public class LazyFileAppender extends FileAppender { @Override public synchronized void setFile(String fileName, boolean append, boolean bufferedIO, int bufferSize) throws IOException { LogLog.debug("setFile called: " + fileName + ", " + append); // It does not make sense to have immediate flush and bufferedIO. if(bufferedIO) { setImmediateFlush(false); } reset(); //Creation of the LazyFileOutputStream object (the responsible of the log writing operations) LazyFileOutputStream ostream = new LazyFileOutputStream(fileName, append); Writer fw = createWriter(ostream); if(bufferedIO) { fw = new BufferedWriter(fw, bufferSize); } this.setQWForFiles(fw); this.fileName = fileName; this.fileAppend = append; this.bufferedIO = bufferedIO; this.bufferSize = bufferSize; writeHeader(); LogLog.debug("setFile ended"); } }