ceki        01/04/20 10:38:32

  Modified:    contribs CONTENTS
  Added:       contribs/LeosLiterak TempFileAppender.java mail
  Log:
  Added LeosLiterak's TempFileAppender.java
  
  Revision  Changes    Path
  1.4       +9 -2      jakarta-log4j/contribs/CONTENTS
  
  Index: CONTENTS
  ===================================================================
  RCS file: /home/cvs/jakarta-log4j/contribs/CONTENTS,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- CONTENTS  2001/04/20 17:32:44     1.3
  +++ CONTENTS  2001/04/20 17:38:23     1.4
  @@ -1,10 +1,10 @@
   
   ----------------------------------------------------------------------
   WARNING: The contents of the contribs/ directory is not guaranteed to
  -work properly. Some files might even not compile.
  +work properly. Some files might not even compile.
   ----------------------------------------------------------------------
   
  -Each directory corresponds to the name of an author containinghis/her 
  +Each directory corresponds to the name of an author containing his/her 
   contributions.
   
   
  @@ -33,6 +33,13 @@
      Allows the user to divert System.out and System.err to log4j.
      
   
  +LeosLiterak/
  +===========
  +
  +   TempFileAppender.java
  +
  +   TempFileAppender creates new unique file for each logging statement.
  +      
   MarkDouglas/
   ===========
   
  
  
  
  1.1                  jakarta-log4j/contribs/LeosLiterak/TempFileAppender.java
  
  Index: TempFileAppender.java
  ===================================================================
   package org.apache.log4j;
   
  import java.io.File;
  import java.io.Writer;
  import java.io.FileWriter;
  import java.io.BufferedWriter;
  import org.apache.log4j.spi.LoggingEvent;
  import org.apache.log4j.helpers.OptionConverter;
  import org.apache.log4j.spi.ErrorHandler;
  
  /**
     TempFileAppender creates new unique file for each logging statement.
   
     @author <a HREF="mailto:[EMAIL PROTECTED]">Leos Literak</a>
     @author Ceki G&uuml;lc&uuml;
   
  */
  public class TempFileAppender extends AppenderSkeleton {
   
    /**
       A string constant used in naming the option for setting the
       directory where the log files will be created. Current value 
       of this string constant is <b>Path</b>. java.io.tmpdir directory
       will be used, if ommited.
     */
    static final public String PATH_OPTION = "Path";
    
    /**
       The default path is actual directory.
    */
    protected String path = null;
   
    /**
       A string constant used in naming the option for setting the
       prefix of the log files. It has to have at least 3 characters!
       Current value of this string constant is <b>Prefix</b>.
     */
    static final public String PREFIX_OPTION = "Prefix";
    
    /**
       The default path is actual directory.
    */
    protected String prefix = "l4j_";
   
    /**
       A string constant used in naming the option for setting the
       suffix of the log files. Current value of this string constant 
       is <b>Suffix</b>.
     */
    static final public String SUFFIX_OPTION = "Suffix";
    
    /**
       The default path is actual directory.
    */
    protected String suffix = ".tmp";
    
    /**
       Default dir
    */
    
    protected File dir = null;
  
  
  
  
    /**
       The default constructor simply calls its parent's constructor. 
    */
    public TempFileAppender() {
        super();
    }
   
    /**
       Retuns the option names for this component
    */
    public String[] getOptionStrings() {
        return OptionConverter.concatanateArrays(super.getOptionStrings(),
                   new String[] {PATH_OPTION,PREFIX_OPTION,SUFFIX_OPTION});
    }  
  
    /**
       Set TempFileAppender specific options.
   
       The recognized options are <b>Path</b>, <b>Prefix</b> and <b>Suffix</b>,
       i.e. the values of the string constants {@link #PATH_OPTION}, 
       {@link #PREFIX_OPTION} and respectively {@link #SUFFIX_OPTION}. 
       The options of the super class {@link AppenderSkeleton} are also 
       recognized.
    */
    
    public void setOption(String key, String value) {
        super.setOption(key, value);
        if(key.equalsIgnoreCase(PATH_OPTION)) {
          path = value;
          if(path==null) {
                errorHandler.error("Path cannot be empty!",null,0);
          }
  
          dir = new File(path);
          if(!(dir.exists() && dir.isDirectory() && dir.canWrite())) {
                errorHandler.error("Cannot write to directory " + path + "!",null,0);
          }
        }
        else if(key.equalsIgnoreCase(PREFIX_OPTION)) {
            if(value!=null && value.length()>=3) {
              prefix = value;
          } else {
                errorHandler.error("Prefix cannot be shorter than 3 characters!",
                                 null,0);
          }
        }
        else if(key.equalsIgnoreCase(SUFFIX_OPTION)) {
            if(value!=null && value.length()>=1) {
              suffix = value;
          } else {
                errorHandler.error("Suffix cannot be empty!",null,0);
          }
        }
    }
  
    /**
       This method is called by {@link AppenderSkeleton#doAppend}
       method.
   
       <p>Whenever this method is called, new unique file is created
       with specified prefix and suffix. The file is closed afterwards.
   
       <p>The format of the output will depend on this appender's
       layout.
   
    */ 
    public void append(LoggingEvent event) { 
        if(!checkEntryConditions()) {
            return;
        }
        subAppend(event);
    }
   
    /**
       This method determines if there is a sense in attempting to append.
    */
    protected boolean checkEntryConditions() {
        return true;
    }   
  
    /**
       This method does actual writing
    */
    protected void subAppend(LoggingEvent event) {
        try {
            File tmp = File.createTempFile(prefix,suffix,dir);
          Writer out = new BufferedWriter(new FileWriter(tmp));
          out.write(event.message);
          out.close();
   /* this Appender is not supposed to be used for logging of Exceptions */
        } catch (Exception e) {
            errorHandler.error("Error during creation of temporary File!",e,1);
        }
    }
    
    public boolean requiresLayout() {
        return false;
    }
    
    public void close() {
    /* nothing to do */
    }
  } 
  /*
   * @author $Author: ceki $
   * @version $Revision: 1.1 $
   * @since $Date: 2001/04/20 17:38:31 $
   *
   * $Log: TempFileAppender.java,v $
   * Revision 1.1  2001/04/20 17:38:31  ceki
   *
   * Added LeosLiterak's TempFileAppender.java
   *
  */
  
  
  
  1.1                  jakarta-log4j/contribs/LeosLiterak/mail
  
  Index: mail
  ===================================================================
  To: [EMAIL PROTECTED]
  Subject: TempFileAppender 
  
  
  Hi Ceki,
  
  
  I have created one small Appender, which puts each
  logging statement into separate file. We use it
  for storing incomming messages into second process'es
  spool directory. If you like it, please include it
  into Log4j with APL license.
  
  
  Usage:
  
  
  log4j.appender.A1=org.apache.log4j.TempFileAppender
  log4j.appender.A1.Path=spool_dir
  log4j.appender.A1.Prefix=out_
  log4j.appender.A1.Suffix=.msg
  
  
          Leo
  
  -----------------------------------------------------
  Leos Literak
  Software Engineer
  
  
  12snap s.r.o.
  Pstrossova 24
  110 00 Praha 1
  Czech Republic
  
  
  mobile:         ?605-849-087
  phone:  ?2-21-970-239
  fax:    ?2-21-970-241
  e-mail: [EMAIL PROTECTED]
  
  
  
  

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

Reply via email to