blob: c49bbe59e5ac621ee64f25df087d183e47100430 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011, 2017 IBM Corporation and others
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.http.jetty.internal;
import org.eclipse.jetty.util.log.Log;
import org.eclipse.jetty.util.log.Logger;
// NOTE: This class simply allows us to override the StdErrLog built into jetty
public class EquinoxStdErrLog implements Logger {
private static int DEBUG = 0;
private static int INFO = 1;
private static int WARN = 2;
private static int ERROR = 3;
private static int OFF = 4;
private static volatile int threshold = WARN;
private static EquinoxStdErrLog root;
private final Logger realLogger;
private final String localName;
public static synchronized EquinoxStdErrLog getRootLogger() {
if (root != null)
return root;
root = new EquinoxStdErrLog(null, null);
return root;
}
public static void setThresholdLogger(String property) {
threshold = parseThresholdProperty(property);
// this is a hack to make sure the built-in jetty StdErrLog is not being used
org.eclipse.jetty.util.log.Logger rootLogger = Log.getRootLogger();
if (rootLogger == null || (rootLogger instanceof Log)) {
// The built-in jetty StdErrLog is be used; replace with ours.
Log.setLog(getRootLogger());
}
}
private static int parseThresholdProperty(String property) {
if (property == null)
return WARN;
if (property.equals("debug")) //$NON-NLS-1$
return DEBUG;
if (property.equals("info")) //$NON-NLS-1$
return INFO;
if (property.equals("warn")) //$NON-NLS-1$
return WARN;
if (property.equals("error")) //$NON-NLS-1$
return ERROR;
if (property.equals("none")) //$NON-NLS-1$
return OFF;
return WARN;
}
public EquinoxStdErrLog(String name, Logger realLogger) {
this.localName = name;
this.realLogger = realLogger;
if (threshold == DEBUG)
this.realLogger.setDebugEnabled(true);
}
@Override
public org.eclipse.jetty.util.log.Logger getLogger(String name) {
if ((name == null && this.localName == null) || (name != null && name.equals(this.localName)))
return this;
return new EquinoxStdErrLog(name, realLogger.getLogger(name));
}
// debugSOO = slf4j.getMethod("debug", new Class[]{String.class,Object.class,Object.class});
@Override
public void debug(String msg, Object... arg0) {
if (threshold > DEBUG)
return;
realLogger.debug(msg, arg0);
}
// debugST = slf4j.getMethod("debug", new Class[]{String.class,Throwable.class});
@Override
public void debug(String msg, Throwable th) {
if (threshold > DEBUG)
return;
realLogger.debug(msg, th);
}
// infoSOO = slf4j.getMethod("info", new Class[]{String.class,Object.class,Object.class});
@Override
public void info(String msg, Object... arg0) {
if (threshold > INFO)
return;
realLogger.info(msg, arg0);
}
// warnSOO = slf4j.getMethod("warn", new Class[]{String.class,Object.class,Object.class});
@Override
public void warn(String msg, Object... arg0) {
if (threshold > WARN)
return;
realLogger.warn(msg, arg0);
}
// warnST = slf4j.getMethod("warn", new Class[]{String.class,Throwable.class});
@Override
public void warn(String msg, Throwable th) {
if (threshold > WARN)
return;
// we treat RuntimeException and Error as an error
if (th instanceof RuntimeException || th instanceof Error)
realLogger.warn("ERROR: " + msg, th); //$NON-NLS-1$
else if (threshold != ERROR)
realLogger.warn(msg, th);
}
// errorST = slf4j.getMethod("error", new Class[]{String.class,Throwable.class});
public void error(String msg, Throwable th) {
if (threshold > ERROR)
return;
realLogger.warn("ERROR: " + msg, th); //$NON-NLS-1$
}
@Override
public String getName() {
return realLogger.getName();
}
@Override
public void warn(Throwable thrown) {
if (threshold > WARN)
return;
realLogger.warn(thrown);
}
@Override
public void info(Throwable thrown) {
if (threshold > INFO)
return;
realLogger.info(thrown);
}
@Override
public void info(String msg, Throwable thrown) {
if (threshold > INFO)
return;
realLogger.info(msg, thrown);
}
@Override
public boolean isDebugEnabled() {
return threshold == DEBUG;
}
@Override
public void setDebugEnabled(boolean enabled) {
threshold = DEBUG;
}
@Override
public void debug(Throwable thrown) {
if (threshold > DEBUG)
return;
realLogger.debug(thrown);
}
@Override
public void ignore(Throwable ignored) {
// Just post this to debug
debug(ignored);
}
@Override
public void debug(String msg, long value) {
if (threshold > DEBUG)
return;
realLogger.debug(msg, value);
}
}