blob: 0da112e5c32b17c30f22e5f3e098e25bb86d810b [file] [log] [blame]
/* 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.
*/
/* $Id$ */
package org.apache.fop.util;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* This is a commons-logging logger for command line use.
*/
public class CommandLineLogger implements Log {
/** "Trace" level logging. */
public static final int LOG_LEVEL_TRACE = 1;
/** "Debug" level logging. */
public static final int LOG_LEVEL_DEBUG = 2;
/** "Info" level logging. */
public static final int LOG_LEVEL_INFO = 3;
/** "Warn" level logging. */
public static final int LOG_LEVEL_WARN = 4;
/** "Error" level logging. */
public static final int LOG_LEVEL_ERROR = 5;
/** "Fatal" level logging. */
public static final int LOG_LEVEL_FATAL = 6;
private int logLevel;
private String logName;
/**
* Construct the logger with a default log level taken from the LogFactory
* attribute "level".
* @param logName the logger name.
*/
public CommandLineLogger(String logName) {
this.logName = logName;
setLogLevel((String) LogFactory.getFactory().getAttribute("level"));
}
/**
* Set a log level for the logger.
* @param level the log level
*/
public void setLogLevel(String level) {
if ("fatal".equals(level)) {
logLevel = LOG_LEVEL_FATAL;
} else if ("error".equals(level)) {
logLevel = LOG_LEVEL_ERROR;
} else if ("warn".equals(level)) {
logLevel = LOG_LEVEL_WARN;
} else if ("info".equals(level)) {
logLevel = LOG_LEVEL_INFO;
} else if ("debug".equals(level)) {
logLevel = LOG_LEVEL_DEBUG;
} else if ("trace".equals(level)) {
logLevel = LOG_LEVEL_TRACE;
} else {
logLevel = LOG_LEVEL_INFO;
}
}
/**
* {@inheritDoc}
*/
public final boolean isTraceEnabled() {
return logLevel <= LOG_LEVEL_TRACE;
}
/**
* {@inheritDoc}
*/
public final boolean isDebugEnabled() {
return logLevel <= LOG_LEVEL_DEBUG;
}
/**
* {@inheritDoc}
*/
public final boolean isInfoEnabled() {
return logLevel <= LOG_LEVEL_INFO;
}
/**
* {@inheritDoc}
*/
public final boolean isWarnEnabled() {
return logLevel <= LOG_LEVEL_WARN;
}
/**
* {@inheritDoc}
*/
public final boolean isErrorEnabled() {
return logLevel <= LOG_LEVEL_ERROR;
}
/**
* {@inheritDoc}
*/
public final boolean isFatalEnabled() {
return logLevel <= LOG_LEVEL_FATAL;
}
/**
* {@inheritDoc}
*/
public final void trace(Object message) {
if (isTraceEnabled()) {
log(LOG_LEVEL_TRACE, message, null);
}
}
/**
* {@inheritDoc}
*/
public final void trace(Object message, Throwable t) {
if (isTraceEnabled()) {
log(LOG_LEVEL_TRACE, message, t);
}
}
/**
* {@inheritDoc}
*/
public final void debug(Object message) {
if (isDebugEnabled()) {
log(LOG_LEVEL_DEBUG, message, null);
}
}
/**
* {@inheritDoc}
*/
public final void debug(Object message, Throwable t) {
if (isDebugEnabled()) {
log(LOG_LEVEL_DEBUG, message, t);
}
}
/**
* {@inheritDoc}
*/
public final void info(Object message) {
if (isInfoEnabled()) {
log(LOG_LEVEL_INFO, message, null);
}
}
/**
* {@inheritDoc}
*/
public final void info(Object message, Throwable t) {
if (isInfoEnabled()) {
log(LOG_LEVEL_INFO, message, t);
}
}
/**
* {@inheritDoc}
*/
public final void warn(Object message) {
if (isWarnEnabled()) {
log(LOG_LEVEL_WARN, message, null);
}
}
/**
* {@inheritDoc}
*/
public final void warn(Object message, Throwable t) {
if (isWarnEnabled()) {
log(LOG_LEVEL_WARN, message, t);
}
}
/**
* {@inheritDoc}
*/
public final void error(Object message) {
if (isErrorEnabled()) {
log(LOG_LEVEL_ERROR, message, null);
}
}
/**
* {@inheritDoc}
*/
public final void error(Object message, Throwable t) {
if (isErrorEnabled()) {
log(LOG_LEVEL_ERROR, message, t);
}
}
/**
* {@inheritDoc}
*/
public final void fatal(Object message) {
if (isFatalEnabled()) {
log(LOG_LEVEL_FATAL, message, null);
}
}
/**
* {@inheritDoc}
*/
public final void fatal(Object message, Throwable t) {
if (isFatalEnabled()) {
log(LOG_LEVEL_FATAL, message, t);
}
}
/**
* Do the actual logging.
* This method assembles the message and prints it to
* and then calls <code>write()</code> to cause it to be written.</p>
*
* @param type One of the LOG_LEVEL_XXX constants defining the log level
* @param message The message itself (typically a String)
* @param t The exception whose stack trace should be logged
*/
protected void log(int type, Object message, Throwable t) {
StringBuffer buf = new StringBuffer();
// Append the message
buf.append(String.valueOf(message));
if (t != null) {
buf.append("\n");
// Append a stack trace or just the stack trace message.
if (!isDebugEnabled()) {
buf.append(t.toString());
buf.append("\n");
} else {
java.io.StringWriter sw = new java.io.StringWriter(1024);
java.io.PrintWriter pw = new java.io.PrintWriter(sw);
t.printStackTrace(pw);
pw.close();
buf.append(sw.toString());
}
}
// Print to the appropriate destination
if (type >= LOG_LEVEL_WARN) {
System.err.println(buf);
} else {
System.out.println(buf);
}
}
}