/* * 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.juli.logging;
/** * Hard-coded java.util.logging commons-logging implementation.
*/ class DirectJDKLog implements Log { // no reason to hide this - but good reasons to not hide publicfinal Logger logger;
// Alternate config reader and console format privatestaticfinal String SIMPLE_FMT="java.util.logging.SimpleFormatter"; privatestaticfinal String FORMATTER="org.apache.juli.formatter";
static { if (System.getProperty("java.util.logging.config.class") == null &&
System.getProperty("java.util.logging.config.file") == null) { // default configuration - it sucks. Let's override at least the // formatter for the console try {
Formatter fmt= (Formatter) Class.forName(System.getProperty(
FORMATTER, SIMPLE_FMT)).getConstructor().newInstance(); // it is also possible that the user modified jre/lib/logging.properties - // but that's really stupid in most cases
Logger root=Logger.getLogger(""); for (Handler handler : root.getHandlers()) { // I only care about console - that's what's used in default config anyway if (handler instanceof ConsoleHandler) {
handler.setFormatter(fmt);
}
}
} catch (Throwable t) { // maybe it wasn't included - the ugly default will be used.
}
}
}
DirectJDKLog(String name ) {
logger=Logger.getLogger(name);
}
// from commons logging. This would be my number one reason why java.util.logging // is bad - design by committee can be really bad ! The impact on performance of // using java.util.logging - and the ugliness if you need to wrap it - is far // worse than the unfriendly and uncommon default format for logs.
privatevoid log(Level level, String msg, Throwable ex) { if (logger.isLoggable(level)) { // Hack (?) to get the stack trace.
Throwable dummyException=new Throwable();
StackTraceElement locations[]=dummyException.getStackTrace(); // Caller will be the third element
String cname = "unknown";
String method = "unknown"; if (locations != null && locations.length >2) {
StackTraceElement caller = locations[2];
cname = caller.getClassName();
method = caller.getMethodName();
} if (ex==null) {
logger.logp(level, cname, method, msg);
} else {
logger.logp(level, cname, method, msg, ex);
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.