/* * 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(); } }