blob: 3b6115dfaf8f91e1912adfeaacac9fa253c49c48 [file] [log] [blame]
/*******************************************************************************
* 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.ofbiz.base.util;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import org.apache.logging.log4j.Level;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
/**
* Configurable Debug logging wrapper class
*
*/
public final class Debug {
private static final String noModuleModule = "NoModule"; // set to null for previous behavior
private static final Object[] emptyParams = new Object[0];
public static final int ALWAYS = 0;
public static final int VERBOSE = 1;
public static final int TIMING = 2;
public static final int INFO = 3;
public static final int IMPORTANT = 4;
public static final int WARNING = 5;
public static final int ERROR = 6;
public static final int FATAL = 7;
private static final String[] levelProps = {"", "print.verbose", "print.timing", "print.info", "print.important", "print.warning", "print.error", "print.fatal"};
private static final Level[] levelObjs = {Level.FATAL, Level.DEBUG, Level.TRACE, Level.INFO, Level.INFO, Level.WARN, Level.ERROR, Level.FATAL};
private static final Map<String, Integer> levelStringMap = new HashMap<String, Integer>();
private static final boolean levelOnCache[] = new boolean[8]; // this field is not thread safe
private static final Logger root = LogManager.getRootLogger();
static {
levelStringMap.put("verbose", Debug.VERBOSE);
levelStringMap.put("timing", Debug.TIMING);
levelStringMap.put("info", Debug.INFO);
levelStringMap.put("important", Debug.IMPORTANT);
levelStringMap.put("warning", Debug.WARNING);
levelStringMap.put("error", Debug.ERROR);
levelStringMap.put("fatal", Debug.FATAL);
levelStringMap.put("always", Debug.ALWAYS);
// initialize levelOnCache
Properties properties = UtilProperties.createProperties("debug.properties");
if (properties != null) {
for (int i = 0; i < levelOnCache.length; i++) {
levelOnCache[i] = (i == Debug.ALWAYS || "true".equalsIgnoreCase(properties.getProperty(levelProps[i])));
}
} else {
throw new IllegalStateException("debug.properties file not found");
}
}
public static Logger getLogger(String module) {
if (UtilValidate.isNotEmpty(module)) {
return LogManager.getLogger(module);
} else {
return root;
}
}
/** Gets an Integer representing the level number from a String representing the level name; will return null if not found */
public static Integer getLevelFromString(String levelName) {
if (levelName == null) return null;
return levelStringMap.get(levelName.toLowerCase());
}
public static void log(int level, Throwable t, String msg, String module) {
log(level, t, msg, module, "org.apache.ofbiz.base.util.Debug", emptyParams);
}
public static void log(int level, Throwable t, String msg, String module, Object... params) {
log(level, t, msg, module, "org.apache.ofbiz.base.util.Debug", params);
}
public static void log(int level, Throwable t, String msg, String module, String callingClass) {
log(level, t, msg, module, callingClass, new Object[0]);
}
public static void log(int level, Throwable t, String msg, String module, String callingClass, Object... params) {
if (isOn(level)) {
if (msg != null && params.length > 0) {
StringBuilder sb = new StringBuilder();
Formatter formatter = new Formatter(sb);
formatter.format(msg, params);
msg = sb.toString();
formatter.close();
}
// log
Logger logger = getLogger(module);
logger.log(levelObjs[level], msg, t);
}
}
public static boolean isOn(int level) {
return levelOnCache[level];
}
// leaving these here
public static void log(String msg) {
log(Debug.ALWAYS, null, msg, noModuleModule, emptyParams);
}
public static void log(String msg, Object... params) {
log(Debug.ALWAYS, null, msg, noModuleModule, params);
}
public static void log(Throwable t) {
log(Debug.ALWAYS, t, null, noModuleModule, emptyParams);
}
public static void log(String msg, String module) {
log(Debug.ALWAYS, null, msg, module, emptyParams);
}
public static void log(String msg, String module, Object... params) {
log(Debug.ALWAYS, null, msg, module, params);
}
public static void log(Throwable t, String module) {
log(Debug.ALWAYS, t, null, module, emptyParams);
}
public static void log(Throwable t, String msg, String module) {
log(Debug.ALWAYS, t, msg, module, emptyParams);
}
public static void log(Throwable t, String msg, String module, Object... params) {
log(Debug.ALWAYS, t, msg, module, params);
}
public static boolean verboseOn() {
return isOn(Debug.VERBOSE);
}
public static void logVerbose(String msg, String module) {
log(Debug.VERBOSE, null, msg, module, emptyParams);
}
public static void logVerbose(String msg, String module, Object... params) {
log(Debug.VERBOSE, null, msg, module, params);
}
public static void logVerbose(Throwable t, String module) {
log(Debug.VERBOSE, t, null, module, emptyParams);
}
public static void logVerbose(Throwable t, String msg, String module) {
log(Debug.VERBOSE, t, msg, module, emptyParams);
}
public static void logVerbose(Throwable t, String msg, String module, Object... params) {
log(Debug.VERBOSE, t, msg, module, params);
}
public static boolean timingOn() {
return isOn(Debug.TIMING);
}
public static void logTiming(String msg, String module) {
log(Debug.TIMING, null, msg, module, emptyParams);
}
public static void logTiming(String msg, String module, Object... params) {
log(Debug.TIMING, null, msg, module, params);
}
public static void logTiming(Throwable t, String module) {
log(Debug.TIMING, t, null, module, emptyParams);
}
public static void logTiming(Throwable t, String msg, String module) {
log(Debug.TIMING, t, msg, module, emptyParams);
}
public static void logTiming(Throwable t, String msg, String module, Object... params) {
log(Debug.TIMING, t, msg, module, params);
}
public static boolean infoOn() {
return isOn(Debug.INFO);
}
public static void logInfo(String msg, String module) {
log(Debug.INFO, null, msg, module, emptyParams);
}
public static void logInfo(String msg, String module, Object... params) {
log(Debug.INFO, null, msg, module, params);
}
public static void logInfo(Throwable t, String module) {
log(Debug.INFO, t, null, module, emptyParams);
}
public static void logInfo(Throwable t, String msg, String module) {
log(Debug.INFO, t, msg, module, emptyParams);
}
public static void logInfo(Throwable t, String msg, String module, Object... params) {
log(Debug.INFO, t, msg, module, params);
}
public static boolean importantOn() {
return isOn(Debug.IMPORTANT);
}
public static void logImportant(String msg, String module) {
log(Debug.IMPORTANT, null, msg, module, emptyParams);
}
public static void logImportant(String msg, String module, Object... params) {
log(Debug.IMPORTANT, null, msg, module, params);
}
public static void logImportant(Throwable t, String module) {
log(Debug.IMPORTANT, t, null, module, emptyParams);
}
public static void logImportant(Throwable t, String msg, String module) {
log(Debug.IMPORTANT, t, msg, module, emptyParams);
}
public static void logImportant(Throwable t, String msg, String module, Object... params) {
log(Debug.IMPORTANT, t, msg, module, params);
}
public static boolean warningOn() {
return isOn(Debug.WARNING);
}
public static void logWarning(String msg, String module) {
log(Debug.WARNING, null, msg, module, emptyParams);
}
public static void logWarning(String msg, String module, Object... params) {
log(Debug.WARNING, null, msg, module, params);
}
public static void logWarning(Throwable t, String module) {
log(Debug.WARNING, t, null, module, emptyParams);
}
public static void logWarning(Throwable t, String msg, String module) {
log(Debug.WARNING, t, msg, module, emptyParams);
}
public static void logWarning(Throwable t, String msg, String module, Object... params) {
log(Debug.WARNING, t, msg, module, params);
}
public static boolean errorOn() {
return isOn(Debug.ERROR);
}
public static void logError(String msg, String module) {
log(Debug.ERROR, null, msg, module, emptyParams);
}
public static void logError(String msg, String module, Object... params) {
log(Debug.ERROR, null, msg, module, params);
}
public static void logError(Throwable t, String module) {
log(Debug.ERROR, t, null, module, emptyParams);
}
public static void logError(Throwable t, String msg, String module) {
log(Debug.ERROR, t, msg, module, emptyParams);
}
public static void logError(Throwable t, String msg, String module, Object... params) {
log(Debug.ERROR, t, msg, module, params);
}
public static boolean fatalOn() {
return isOn(Debug.FATAL);
}
public static void logFatal(String msg, String module) {
log(Debug.FATAL, null, msg, module, emptyParams);
}
public static void logFatal(String msg, String module, Object... params) {
log(Debug.FATAL, null, msg, module, params);
}
public static void logFatal(Throwable t, String module) {
log(Debug.FATAL, t, null, module, emptyParams);
}
public static void logFatal(Throwable t, String msg, String module) {
log(Debug.FATAL, t, msg, module, emptyParams);
}
public static void logFatal(Throwable t, String msg, String module, Object... params) {
log(Debug.FATAL, t, msg, module, params);
}
public static void set(int level, boolean on) {
levelOnCache[level] = on;
}
public static boolean get(int level) {
return levelOnCache[level];
}
}