001: /**********************************************************************
002: Copyright (c) 2006 Andy Jefferson and others. All rights reserved.
003: Licensed under the Apache License, Version 2.0 (the "License");
004: you may not use this file except in compliance with the License.
005: You may obtain a copy of the License at
006:
007: http://www.apache.org/licenses/LICENSE-2.0
008:
009: Unless required by applicable law or agreed to in writing, software
010: distributed under the License is distributed on an "AS IS" BASIS,
011: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012: See the License for the specific language governing permissions and
013: limitations under the License.
014:
015: Contributors:
016: ...
017: **********************************************************************/package org.jpox.util;
018:
019: import java.util.logging.Logger;
020: import java.util.logging.Level;
021: import java.util.logging.LogRecord;
022:
023: /**
024: * JDK1.4 logger (java.util.logging) implementation of a JPOXLogger.
025: * Assumes that all configuration of the loggers are done by external
026: * configuration (System property "java.util.logging.config.file").
027: * Maps JPOX logging levels as follows :
028: * <ul>
029: * <li>debug maps to java.util.logging <i>fine</i></li>
030: * <li>info maps to java.util.logging <i>info</i></li>
031: * <li>warn maps to java.util.logging <i>warning</i></li>
032: * <li>error maps to java.util.logging <i>severe</i></li>
033: * <li>fatal maps to java.util.logging <i>severe</i></li>
034: * </ul>
035: *
036: * @version $Revision: 1.4 $
037: */
038: public class JDK14Logger extends JPOXLogger {
039: /** The JDK1.4 Logger being used */
040: private final Logger logger;
041:
042: /**
043: * Constructor for a JDK 1.4 Logger.
044: * @param logName Name of the logger
045: */
046: public JDK14Logger(String logName) {
047: // Logging assumed to be configured by user via "java.util.logging.config.file"
048: logger = Logger.getLogger(logName);
049: }
050:
051: /**
052: * Log a debug message.
053: * @param msg The message
054: */
055: public void debug(Object msg) {
056: log(Level.FINE, msg, null);
057: }
058:
059: /**
060: * Log a debug message with throwable.
061: * @param msg The message
062: * @param thr A throwable
063: */
064: public void debug(Object msg, Throwable thr) {
065: log(Level.FINE, msg, thr);
066: }
067:
068: /**
069: * Log an info message.
070: * @param msg The message
071: */
072: public void info(Object msg) {
073: log(Level.INFO, msg, null);
074: }
075:
076: /**
077: * Log an info message with throwable.
078: * @param msg The message
079: * @param thr A throwable
080: */
081: public void info(Object msg, Throwable thr) {
082: log(Level.INFO, msg, thr);
083: }
084:
085: /**
086: * Log a warning message.
087: * @param msg The message
088: */
089: public void warn(Object msg) {
090: log(Level.WARNING, msg, null);
091: }
092:
093: /**
094: * Log a warning message with throwable.
095: * @param msg The message
096: * @param thr A throwable
097: */
098: public void warn(Object msg, Throwable thr) {
099: log(Level.WARNING, msg, thr);
100: }
101:
102: /**
103: * Log an error message.
104: * @param msg The message
105: */
106: public void error(Object msg) {
107: log(Level.SEVERE, msg, null);
108: }
109:
110: /**
111: * Log an error message with throwable.
112: * @param msg The message
113: * @param thr A throwable
114: */
115: public void error(Object msg, Throwable thr) {
116: log(Level.SEVERE, msg, thr);
117: }
118:
119: /**
120: * Log a fatal message.
121: * @param msg The message
122: */
123: public void fatal(Object msg) {
124: log(Level.SEVERE, msg, null);
125: }
126:
127: /**
128: * Log a fatal message with throwable.
129: * @param msg The message
130: * @param thr A throwable
131: */
132: public void fatal(Object msg, Throwable thr) {
133: log(Level.SEVERE, msg, thr);
134: }
135:
136: /**
137: * Accessor for whether debug logging is enabled
138: * @return Whether it is enabled
139: */
140: public boolean isDebugEnabled() {
141: return logger.isLoggable(java.util.logging.Level.FINE);
142: }
143:
144: /**
145: * Accessor for whether info logging is enabled
146: * @return Whether it is enabled
147: */
148: public boolean isInfoEnabled() {
149: return logger.isLoggable(java.util.logging.Level.INFO);
150: }
151:
152: private void log(Level level, Object msg, Throwable thrown) {
153: if (msg == null) {
154: level = Level.SEVERE;
155: msg = "Missing [msg] parameter";
156: }
157:
158: if (logger.isLoggable(level)) {
159: LogRecord result = new LogRecord(level, String.valueOf(msg));
160: if (thrown != null)
161: result.setThrown(thrown);
162: StackTraceElement[] stacktrace = new Throwable()
163: .getStackTrace();
164: for (int i = 0; i < stacktrace.length; i++) {
165: StackTraceElement element = stacktrace[i];
166: if (!element.getClassName().equals(
167: JDK14Logger.class.getName())) {
168: result.setSourceClassName(element.getClassName());
169: result.setSourceMethodName(element.getMethodName());
170: break;
171: }
172: }
173: logger.log(result);
174: }
175: }
176: }
|