com.sun.jdo.spi.persistence.utility.logging.LoggerJDK14 Maven / Gradle / Ivy
Show all versions of payara-micro Show documentation
/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
*
* Copyright (c) 1997-2010 Oracle and/or its affiliates. All rights reserved.
*
* The contents of this file are subject to the terms of either the GNU
* General Public License Version 2 only ("GPL") or the Common Development
* and Distribution License("CDDL") (collectively, the "License"). You
* may not use this file except in compliance with the License. You can
* obtain a copy of the License at
* https://glassfish.dev.java.net/public/CDDL+GPL_1_1.html
* or packager/legal/LICENSE.txt. See the License for the specific
* language governing permissions and limitations under the License.
*
* When distributing the software, include this License Header Notice in each
* file and include the License file at packager/legal/LICENSE.txt.
*
* GPL Classpath Exception:
* Oracle designates this particular file as subject to the "Classpath"
* exception as provided by Oracle in the GPL Version 2 section of the License
* file that accompanied this code.
*
* Modifications:
* If applicable, add the following below the License Header, with the fields
* enclosed by brackets [] replaced by your own identifying information:
* "Portions Copyright [year] [name of copyright owner]"
*
* Contributor(s):
* If you wish your version of this file to be governed by only the CDDL or
* only the GPL Version 2, indicate your decision by adding "[Contributor]
* elects to include this software in this distribution under the [CDDL or GPL
* Version 2] license." If you don't indicate a single choice of license, a
* recipient has the option to distribute your version of this file under
* either the CDDL, the GPL Version 2 or to extend the choice of license to
* its licensees as provided above. However, if you add GPL Version 2 code
* and therefore, elected the GPL Version 2 license, then the option applies
* only if the new code is made subject to such option by the copyright
* holder.
*/
// Portions Copyright [2019] Payara Foundation and/or affiliates
package com.sun.jdo.spi.persistence.utility.logging;
import java.util.logging.Level;
/**
* This class is used with JDK 1.4 (and higher) programs to log messages from
* jdo components. It extends a java.util.logging.Logger which does
* the actual logging.
*
* @author Craig Russell
* @version 1.0
*/
public class LoggerJDK14 extends java.util.logging.Logger implements Logger {
/** Class that issued logging call; set by inferCaller. */
protected String sourceClassName;
/** Method that issued logging call; set by inferCaller. */
protected String sourceMethodName;
/** Creates new LoggerJDK14. The Thread context class loader or the
* loader which loaded this class must be able to load the bundle.
* @param loggerName the full domain name of this logger
* @param bundleName the bundle name for message translation
*/
public LoggerJDK14(String loggerName, String bundleName) {
super (loggerName, bundleName);
}
/** Return whether logging is enabled
* at the FINE level. This method
* is not exact because to make it
* accurately reflect the logging level
* we would have to include the JDK 1.4
* java.util.logging.Level class.
* @return whether logging is enabled at the fine level.
*/
public boolean isLoggable() {
return isLoggable(Level.FINE);
}
/**
* Log a FINE message.
*
* If the logger is currently enabled for the FINE message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param msg The string message (or a key in the message catalog)
* @param o Objects to be inserted into the message
*/
public void fine(String msg, Object[] o) {
if (isLoggable(Level.FINE)) {
inferCaller();
logp(Level.FINE, sourceClassName, sourceMethodName, msg, o);
}
}
/**
* Log a FINE message.
*
* If the logger is currently enabled for the FINE message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param msg The string message (or a key in the message catalog)
* @param o1 A parameter to be inserted into the message
*/
public void fine(String msg, Object o1) {
if (isLoggable(Level.FINE)) {
inferCaller();
logp(Level.FINE, sourceClassName, sourceMethodName, msg, o1);
}
}
/**
* Log a FINE message.
*
* If the logger is currently enabled for the FINE message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param msg The string message (or a key in the message catalog)
* @param o1 A parameter to be inserted into the message
* @param o2 A parameter to be inserted into the message
*/
public void fine(String msg, Object o1, Object o2) {
if (isLoggable(Level.FINE)) {
inferCaller();
logp(Level.FINE, sourceClassName, sourceMethodName, msg, new Object[]{o1, o2});
}
}
/**
* Log a FINE message.
*
* If the logger is currently enabled for the FINE message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param msg The string message (or a key in the message catalog)
* @param o1 A parameter to be inserted into the message
* @param o2 A parameter to be inserted into the message
* @param o3 A parameter to be inserted into the message
*/
public void fine(String msg, Object o1, Object o2, Object o3) {
if (isLoggable(Level.FINE)) {
inferCaller();
logp(Level.FINE, sourceClassName, sourceMethodName, msg, new Object[]{o1, o2, o3});
}
}
/**
* Log a FINER message.
*
* If the logger is currently enabled for the FINER message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param msg The string message (or a key in the message catalog)
* @param o Objects to be inserted into the message
*/
public void finer(String msg, Object[] o) {
if (isLoggable(Level.FINER)) {
inferCaller();
logp(Level.FINER, sourceClassName, sourceMethodName, msg, o);
}
}
/**
* Log a FINER message.
*
* If the logger is currently enabled for the FINER message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param msg The string message (or a key in the message catalog)
* @param o1 A parameter to be inserted into the message
*/
public void finer(String msg, Object o1) {
if (isLoggable(Level.FINER)) {
inferCaller();
logp(Level.FINER, sourceClassName, sourceMethodName, msg, o1);
}
}
/**
* Log a FINER message.
*
* If the logger is currently enabled for the FINER message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param msg The string message (or a key in the message catalog)
* @param o1 A parameter to be inserted into the message
* @param o2 A parameter to be inserted into the message
*/
public void finer(String msg, Object o1, Object o2) {
if (isLoggable(Level.FINER)) {
inferCaller();
logp(Level.FINER, sourceClassName, sourceMethodName, msg,
new Object[]{o1, o2});
}
}
/**
* Log a FINER message.
*
* If the logger is currently enabled for the FINER message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param msg The string message (or a key in the message catalog)
* @param o1 A parameter to be inserted into the message
* @param o2 A parameter to be inserted into the message
* @param o3 A parameter to be inserted into the message
*/
public void finer(String msg, Object o1, Object o2, Object o3) {
if (isLoggable(Level.FINER)) {
inferCaller();
logp(Level.FINER, sourceClassName, sourceMethodName, msg,
new Object[]{o1, o2, o3});
}
}
/**
* Log a FINEST message.
*
* If the logger is currently enabled for the FINEST message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param msg The string message (or a key in the message catalog)
* @param o Objects to be inserted into the message
*/
public void finest(String msg, Object[] o) {
if (isLoggable(Level.FINEST)) {
inferCaller();
logp(Level.FINEST, sourceClassName, sourceMethodName, msg, o);
}
}
/**
* Log a FINEST message.
*
* If the logger is currently enabled for the FINEST message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param msg The string message (or a key in the message catalog)
* @param o1 A parameter to be inserted into the message
*/
public void finest(String msg, Object o1) {
if (isLoggable(Level.FINEST)) {
inferCaller();
logp(Level.FINEST, sourceClassName, sourceMethodName, msg, o1);
}
}
/**
* Log a FINEST message.
*
* If the logger is currently enabled for the FINEST message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param msg The string message (or a key in the message catalog)
* @param o1 A parameter to be inserted into the message
* @param o2 A parameter to be inserted into the message
*/
public void finest(String msg, Object o1, Object o2) {
if (isLoggable(Level.FINEST)) {
inferCaller();
logp(Level.FINEST, sourceClassName, sourceMethodName, msg,
new Object[]{o1, o2});
}
}
/**
* Log a FINEST message.
*
* If the logger is currently enabled for the FINEST message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param msg The string message (or a key in the message catalog)
* @param o1 A parameter to be inserted into the message
* @param o2 A parameter to be inserted into the message
* @param o3 A parameter to be inserted into the message
*/
public void finest(String msg, Object o1, Object o2, Object o3) {
if (isLoggable(Level.FINEST)) {
inferCaller();
logp(Level.FINEST, sourceClassName, sourceMethodName, msg,
new Object[]{o1, o2, o3});
}
}
/** Prepare a printable version of this instance.
* @return the String representation of this object
*/
public String toString() {
StringBuilder buf = new StringBuilder ("LoggerJDK14: "); //NOI18N
buf.append (" name: "); buf.append (getName()); //NOI18N
buf.append (", super: "); buf.append (super.toString()); //NOI18N
buf.append (", logging level: "); buf.append (getLevel()); //NOI18N
return buf.toString();
}
/**
* Log a message.
*
* If the logger is currently enabled for the message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param level The level for this message
* @param msg The string message (or a key in the message catalog)
* @param o1 A parameter to be inserted into the message
*/
public void log(int level, String msg, Object o1) {
Level lvl = convertLevel(level);
if (isLoggable(lvl)) {
inferCaller();
logp(lvl, sourceClassName, sourceMethodName, msg, o1);
}
}
/**
* Log a message.
*
* If the logger is currently enabled for the message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param level The level for this message
* @param msg The string message (or a key in the message catalog)
* @param o1 A parameter to be inserted into the message
* @param o2 A parameter to be inserted into the message
*/
public void log(int level, String msg, Object o1, Object o2) {
Level lvl = convertLevel(level);
if (isLoggable(lvl)) {
inferCaller();
logp(lvl, sourceClassName, sourceMethodName, msg, new Object[]{o1, o2});
}
}
/**
* Log a message.
*
* If the logger is currently enabled for the message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param level The level for this message
* @param msg The string message (or a key in the message catalog)
* @param o1 A parameter to be inserted into the message
* @param o2 A parameter to be inserted into the message
* @param o3 A parameter to be inserted into the message
*/
public void log(int level, String msg, Object o1, Object o2, Object o3) {
Level lvl = convertLevel(level);
if (isLoggable(lvl)) {
inferCaller();
logp(lvl, sourceClassName, sourceMethodName, msg,
new Object[] {o1, o2, o3});
}
}
/**
* Log a message.
*
* If the logger is currently enabled for the message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param level The level for this message
* @param msg The string message (or a key in the message catalog)
* @param o Objects to be inserted into the message
*/
public void log(int level, String msg, Object[] o) {
Level lvl = convertLevel(level);
if (isLoggable(lvl)) {
inferCaller();
logp(lvl, sourceClassName, sourceMethodName, msg, o);
}
}
/**
* Log a message.
*
* If the logger is currently enabled for the message
* level then the given message is forwarded to all the
* registered output Handler objects.
*
* @param level The level for this message
* @param msg The string message (or a key in the message catalog)
*/
public void log(int level, String msg) {
Level lvl = convertLevel(level);
if (isLoggable(lvl)) {
inferCaller();
logp(lvl, sourceClassName, sourceMethodName, msg);
}
}
/**
* Log a message.
*
* If the logger is currently enabled for the message
* level then the given message, and the exception dump,
* is forwarded to all the
* registered output Handler objects.
*
* @param level The level for this message
* @param msg The string message (or a key in the message catalog)
* @param thrown The exception to log
*/
public void log(int level, String msg, Throwable thrown ){
Level lvl = convertLevel(level);
if (isLoggable(lvl)) {
inferCaller();
logp(lvl, sourceClassName, sourceMethodName, msg, thrown);
}
}
/**
* Check if a message of the given level would actually be logged
* by this logger. This check is based on the Loggers effective level,
* which may be inherited from its parent.
*
* @return true if the given message level is currently being logged.
* @param levelValue the level to check
*/
public boolean isLoggable(int levelValue) {
return isLoggable(convertLevel(levelValue));
}
/** Convert an int level used by jdo logger to the Level instance used
* by JDK 1.4 logger.
* This is done to allow components to use logging outside the JDK 1.4
* environment.
* @param level the level to convert
* @return the Level instance corresponding to the int level
*/
protected Level convertLevel(int level) {
switch (level) {
case 300: return Level.FINEST;
case 400: return Level.FINER;
case 500: return Level.FINE;
case 700: return Level.CONFIG;
case 800: return Level.INFO;
case 900: return Level.WARNING;
case 1000: return Level.SEVERE;
default: return Level.CONFIG;
}
}
/**
* Method to infer the caller's class name and method name.
* The method analyses the current stack trace, to find the method that
* issued the logger call. It stores the callers class and method name
* into fields sourceClassName and sourceMethodName.
*/
protected void inferCaller() {
// Get the stack trace.
StackTraceElement[] stack = (new Throwable()).getStackTrace();
// Search for the first frame before the "Logger" class.
for(int ix = 0; ix < stack.length; ix++) {
StackTraceElement frame = stack[ix];
String cname = frame.getClassName();
if (!isLoggerClass(cname)) {
// We've found the relevant frame.
sourceClassName = cname;
sourceMethodName = frame.getMethodName();
return;
}
}
}
/**
* This method is a helper method for {@link #inferCaller}. It returns
* true
if the specified class name denotes a logger class
* that should be ignored when analysing the stack trace to infer the
* caller of a log message.
* @param className the class name to be checked.
* @return true
if the specified name denotes a logger class;
* false
otherwise.
*/
protected boolean isLoggerClass(String className)
{
return "com.sun.jdo.spi.persistence.utility.logging.LoggerJDK14". //NOI18N
equals(className);
}
}