mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +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
|
|
*
|
|
*/
|