mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-11-04 00:02:37 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			199 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			199 lines
		
	
	
		
			5.5 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
/*
 | 
						|
 * Licensed to the Apache Software Foundation (ASF) under one or more
 | 
						|
 * contributor license agreements.  See the NOTICE file distributed with
 | 
						|
 * this work for additional information regarding copyright ownership.
 | 
						|
 * The ASF licenses this file to You under the Apache License, Version 2.0
 | 
						|
 * (the "License"); you may not use this file except in compliance with
 | 
						|
 * the License.  You may obtain a copy of the License at
 | 
						|
 * 
 | 
						|
 *      http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
 * 
 | 
						|
 * Unless required by applicable law or agreed to in writing, software
 | 
						|
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
						|
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
						|
 * See the License for the specific language governing permissions and
 | 
						|
 * limitations under the License.
 | 
						|
 */
 | 
						|
 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:leos.literak@12snap.com">Leos Literak</a>
 | 
						|
   @author Ceki Gülcü
 | 
						|
 
 | 
						|
*/
 | 
						|
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: carnold $
 | 
						|
 * @version $Revision: 511036 $
 | 
						|
 * @since $Date: 2007-02-23 11:48:53 -0600 (Fri, 23 Feb 2007) $
 | 
						|
 *
 | 
						|
 * $Log$
 | 
						|
 * Revision 1.1.2.1  2005/05/27 03:27:54  mwomack
 | 
						|
 * Fix for #35032.  Added license header to .java files that did not already have a license.
 | 
						|
 *
 | 
						|
 * Revision 1.1  2001/04/20 17:38:31  ceki
 | 
						|
 *
 | 
						|
 * Added LeosLiterak's TempFileAppender.java
 | 
						|
 *
 | 
						|
*/
 |