blob: 8491769784e80218bf221e65ce98892bec5d7025 [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.
*/
package org.apache.uima.util.impl;
import java.io.OutputStream;
import java.io.PrintStream;
import java.text.MessageFormat;
import java.util.Date;
import org.apache.uima.internal.util.I18nUtil;
import org.apache.uima.resource.ResourceManager;
import org.apache.uima.util.Level;
import org.apache.uima.util.Logger;
/**
* UIMA Logging interface implementation without using an logging toolkit
*
*/
public class Logger_impl implements Logger {
/**
* default PrintStream to which the log messages are printed. Defaults to <code>System.out</code>.
*/
private static final PrintStream defaultOut = System.out;
/**
* PrintStream which the object is used to log the messages, is by default set to defaultOut
*/
private PrintStream mOut;
/**
* message level to be logged
*/
private Level configLevel = Level.INFO;
/**
* default logger instance
*/
private static final Logger_impl defaultLogger = new Logger_impl();
/**
* ResourceManager whose extension ClassLoader will be used to locate the message digests. Null
* will cause the ClassLoader to default to this.class.getClassLoader().
*/
private ResourceManager mResourceManager = null;
/**
* creates a new Logger object and set <code>System.out</code> as default output
*/
private Logger_impl() {
// set default Output
mOut = defaultOut;
}
/**
* creates a new Logger instance for the specified source class
*
* @param component
* current source class
*
* @return Logger - returns the Logger object for the specified class
*/
public static synchronized Logger getInstance(Class<?> component) {
return new Logger_impl();
}
/**
* creates a new Logger instance for the specified source class
*
* @return Logger - returns a new Logger object
*/
public static synchronized Logger getInstance() {
return defaultLogger;
}
/**
* Logs a message with message level INFO
*
* @deprecated use method with log level as parameter
*
* @param aMessage
* the message to be logged
*/
@Deprecated
public void log(String aMessage) {
if (isLoggable(Level.INFO) && mOut != null) {
mOut.print(new Date());
mOut.print(": " + Level.INFO.toString() + ": ");
mOut.println(aMessage);
}
}
/**
* Logs a message with a message key and with the message level INFO
*
* @deprecated use method with log level as parameter
*
* @see org.apache.uima.util.Logger#log(java.lang.String, java.lang.String, java.lang.Object[])
*/
@Deprecated
public void log(String aResourceBundleName, String aMessageKey, Object[] aArguments) {
if (isLoggable(Level.INFO)) {
log(I18nUtil.localizeMessage(aResourceBundleName, aMessageKey, aArguments,
getExtensionClassLoader()));
}
}
/**
* Logs an exception with message level INFO
*
* @deprecated use method with log level as parameter
*
* @param aException
* the exception to be logged
*/
@Deprecated
public void logException(Exception aException) {
if (isLoggable(Level.INFO) && mOut != null) {
mOut.print(new Date());
mOut.print(": " + Level.INFO.toString() + ": ");
aException.printStackTrace(mOut);
}
}
/**
* @deprecated use external configuration possibility
*
* @see org.apache.uima.util.Logger#setOutputStream(java.io.OutputStream)
*/
@Deprecated
public void setOutputStream(OutputStream out) {
if (out == null || out instanceof PrintStream) {
mOut = (PrintStream) out;
} else {
mOut = new PrintStream(out);
}
}
/**
* @deprecated use external configuration possibility
*
* @see org.apache.uima.util.Logger#setOutputStream(java.io.PrintStream)
*/
@Deprecated
public void setOutputStream(PrintStream out) {
mOut = out;
}
/**
* Logs an exception.
*
* @param level
* message level
* @param thrown
* the throwable
*/
private void logException(Level level, Throwable thrown) {
mOut.print(new Date());
mOut.print(": " + level.toString() + ": ");
thrown.printStackTrace(mOut);
}
/**
* Logs a message.
*
* @param level
* message level
* @param aMessage
* the message
*/
private void logMessage(Level level, String aMessage) {
if (mOut != null) {
mOut.print(new Date());
mOut.print(": " + level.toString() + ": ");
mOut.println(aMessage);
}
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.util.Logger#isLoggable(org.apache.uima.util.Level)
*/
public boolean isLoggable(Level level) {
return configLevel.isGreaterOrEqual(level);
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.util.Logger#log(org.apache.uima.util.Level, java.lang.String)
*/
public void log(Level level, String aMessage) {
if (isLoggable(level)) {
logMessage(level, aMessage);
}
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.util.Logger#log(org.apache.uima.util.Level, java.lang.String,
* java.lang.Object)
*/
public void log(Level level, String aMessage, Object param1) {
if (isLoggable(level)) {
String result = MessageFormat.format(aMessage, new Object[] { param1 });
logMessage(level, result);
}
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.util.Logger#log(org.apache.uima.util.Level, java.lang.String,
* java.lang.Object[])
*/
public void log(Level level, String aMessage, Object[] params) {
if (isLoggable(level)) {
String result = MessageFormat.format(aMessage, params);
logMessage(level, result);
}
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.util.Logger#log(org.apache.uima.util.Level, java.lang.String,
* java.lang.Throwable)
*/
public void log(Level level, String aMessage, Throwable thrown) {
if (isLoggable(level)) {
logMessage(level, aMessage);
logException(level, thrown);
}
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.util.Logger#logrb(org.apache.uima.util.Level, java.lang.String,
* java.lang.String, java.lang.String, java.lang.String, java.lang.Object)
*/
public void logrb(Level level, String sourceClass, String sourceMethod, String bundleName,
String msgKey, Object param1) {
if (isLoggable(level)) {
logMessage(level, I18nUtil.localizeMessage(bundleName, msgKey, new Object[] { param1 },
getExtensionClassLoader()));
}
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.util.Logger#logrb(org.apache.uima.util.Level, java.lang.String,
* java.lang.String, java.lang.String, java.lang.String, java.lang.Object[])
*/
public void logrb(Level level, String sourceClass, String sourceMethod, String bundleName,
String msgKey, Object[] params) {
if (isLoggable(level)) {
logMessage(level, I18nUtil.localizeMessage(bundleName, msgKey, params,
getExtensionClassLoader()));
}
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.util.Logger#logrb(org.apache.uima.util.Level, java.lang.String,
* java.lang.String, java.lang.String, java.lang.String, java.lang.Throwable)
*/
public void logrb(Level level, String sourceClass, String sourceMethod, String bundleName,
String msgKey, Throwable thrown) {
if (isLoggable(level)) {
logMessage(level, I18nUtil.localizeMessage(bundleName, msgKey, null,
getExtensionClassLoader()));
logException(level, thrown);
}
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.util.Logger#logrb(org.apache.uima.util.Level, java.lang.String,
* java.lang.String, java.lang.String, java.lang.String)
*/
public void logrb(Level level, String sourceClass, String sourceMethod, String bundleName,
String msgKey) {
if (isLoggable(level)) {
logMessage(level, I18nUtil.localizeMessage(bundleName, msgKey, null,
getExtensionClassLoader()));
}
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.util.Logger#setLevel(org.apache.uima.util.Level)
*/
public void setLevel(Level level) {
// set new config level
configLevel = level;
}
/*
* (non-Javadoc)
*
* @see org.apache.uima.util.Logger#setResourceManager(org.apache.uima.resource.ResourceManager)
*/
public void setResourceManager(ResourceManager resourceManager) {
mResourceManager = resourceManager;
}
/**
* Gets the extension ClassLoader to used to locate the message digests. If this returns null,
* then message digests will be searched for using this.class.getClassLoader().
*/
private ClassLoader getExtensionClassLoader() {
if (mResourceManager == null)
return null;
else
return mResourceManager.getExtensionClassLoader();
}
}