init
This commit is contained in:
185
java/org/apache/juli/logging/DirectJDKLog.java
Normal file
185
java/org/apache/juli/logging/DirectJDKLog.java
Normal file
@@ -0,0 +1,185 @@
|
||||
/*
|
||||
* 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;
|
||||
|
||||
import java.util.logging.ConsoleHandler;
|
||||
import java.util.logging.Formatter;
|
||||
import java.util.logging.Handler;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
/**
|
||||
* Hard-coded java.util.logging commons-logging implementation.
|
||||
*/
|
||||
class DirectJDKLog implements Log {
|
||||
// no reason to hide this - but good reasons to not hide
|
||||
public final Logger logger;
|
||||
|
||||
// Alternate config reader and console format
|
||||
private static final String SIMPLE_FMT="java.util.logging.SimpleFormatter";
|
||||
private static final 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.
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public DirectJDKLog(String name ) {
|
||||
logger=Logger.getLogger(name);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isErrorEnabled() {
|
||||
return logger.isLoggable(Level.SEVERE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isWarnEnabled() {
|
||||
return logger.isLoggable(Level.WARNING);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isInfoEnabled() {
|
||||
return logger.isLoggable(Level.INFO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isDebugEnabled() {
|
||||
return logger.isLoggable(Level.FINE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isFatalEnabled() {
|
||||
return logger.isLoggable(Level.SEVERE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final boolean isTraceEnabled() {
|
||||
return logger.isLoggable(Level.FINER);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void debug(Object message) {
|
||||
log(Level.FINE, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void debug(Object message, Throwable t) {
|
||||
log(Level.FINE, String.valueOf(message), t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void trace(Object message) {
|
||||
log(Level.FINER, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void trace(Object message, Throwable t) {
|
||||
log(Level.FINER, String.valueOf(message), t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void info(Object message) {
|
||||
log(Level.INFO, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void info(Object message, Throwable t) {
|
||||
log(Level.INFO, String.valueOf(message), t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void warn(Object message) {
|
||||
log(Level.WARNING, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void warn(Object message, Throwable t) {
|
||||
log(Level.WARNING, String.valueOf(message), t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void error(Object message) {
|
||||
log(Level.SEVERE, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void error(Object message, Throwable t) {
|
||||
log(Level.SEVERE, String.valueOf(message), t);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void fatal(Object message) {
|
||||
log(Level.SEVERE, String.valueOf(message), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void fatal(Object message, Throwable t) {
|
||||
log(Level.SEVERE, String.valueOf(message), t);
|
||||
}
|
||||
|
||||
// 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.
|
||||
|
||||
private void 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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static Log getInstance(String name) {
|
||||
return new DirectJDKLog( name );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user