Good stuff.

I was considering it a need and find someone post the code this morning !
The rest is as easy as writing a similar code using gzip and add it  
to my logging package.
One question: Why no fileEntry.close()  in stream close code ?
I know nothing about how zip compression works and gzip appears to  
require no such ZipEntry stuff, so I use gzip instead.

Thanks to Oleg.

Jin


Hello everyone.

I am using log4j already in my second project.
At last time we found very big problem to manage logs on remote  
machine with
low-band connection.
So before open the log I have to commpress it and than download.
So I extend the  RillingFileAppender like shown later:

If I am right , or you going to make more flexible  
rollingfileappender that
will be more easy to extend?

Thank you for you.

With best wishes Oleg Zaidiner.
mailto:[EMAIL PROTECTED]
Software Engineer InirU Ltd.


public class RollingZipFileAppender extends RollingFileAppender
{

  /**
   * move current file to current.1.zip and rename all the files ".x.zip"
   * to ".x+1.zip"...
   */
  public // synchronization not necessary since doAppend is already  
synched
  void rollOver() {
    File target;
    File file;

    // If maxBackups <= 0, then there is no file renaming to be done.
    if(maxBackupIndex > 0) {
      // Delete the oldest file, to keep Windows happy.
      file = new File(fileName + '.' + maxBackupIndex + ".zip"); //  
added by
Oleg
      if (file.exists())
       file.delete();

      // Map {(maxBackupIndex - 1), ..., 2, 1} to {maxBackupIndex, ..., 3,
2}
      for (int i = maxBackupIndex - 1; i >= 1; i--) {
        file = new File(fileName + "." + i + ".zip" ); // added by Oleg
        if (file.exists()) {
          target = new File(fileName + '.' + (i + 1) + ".zip" ); //  
added by
Oleg
          file.renameTo(target);
        }
    }

      // Rename fileName to fileName.1
      target = new File(fileName + "." + 1);

      this.closeFile(); // keep windows happy.

      file = new File(fileName);
      file.renameTo(target);

      zipFile(target.getPath()); // added by Oleg
    }

    try {
      // This will also close the file. This is OK since multiple
      // close operations are safe.
      this.setFile(fileName, false);
    }
    catch(IOException e) {
      LogLog.error("setFile("+fileName+", false) call failed.", e);
    }
  }


 public void zipFile(String filePath) {
                // Using try is required because of file io.
    FileOutputStream fos = null;
    ZipOutputStream zos = null;

                try {
      // Init Zip file stream.
      fos = new FileOutputStream(filePath+".zip");
                  zos = new ZipOutputStream(fos);
                        // Create a file input stream and a buffered input
stream.
                        FileInputStream fis = new  
FileInputStream(filePath);
                        BufferedInputStream bis = new
BufferedInputStream(fis);

                        // Create a Zip Entry and put it into the archive
(no data yet).
                        ZipEntry fileEntry = new ZipEntry(filePath);
                        zos.putNextEntry(fileEntry);

                        // Create a byte array object named data and  
declare
byte count variable.
                        byte[] data = new byte[1024];
                        int byteCount;
                        // Create a loop that reads from the  
buffered input
stream and writes
                        // to the zip output stream until the bis has been
entirely read.
                        while ((byteCount = bis.read(data, 0, 1024))  
> -1) {
                                zos.write(data, 0, byteCount);
                        }

      // Close Zip output Stream
      zos.flush();
      zos.close();
      fos.close();

                } catch (IOException e) {
                }

                System.out.println(filePath);
        }


}

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

Reply via email to