103928aee4356845252ac6b662d5c72c29903813eJake Slack// 203928aee4356845252ac6b662d5c72c29903813eJake Slack// ======================================================================== 303928aee4356845252ac6b662d5c72c29903813eJake Slack// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd. 403928aee4356845252ac6b662d5c72c29903813eJake Slack// ------------------------------------------------------------------------ 503928aee4356845252ac6b662d5c72c29903813eJake Slack// All rights reserved. This program and the accompanying materials 603928aee4356845252ac6b662d5c72c29903813eJake Slack// are made available under the terms of the Eclipse Public License v1.0 703928aee4356845252ac6b662d5c72c29903813eJake Slack// and Apache License v2.0 which accompanies this distribution. 803928aee4356845252ac6b662d5c72c29903813eJake Slack// 903928aee4356845252ac6b662d5c72c29903813eJake Slack// The Eclipse Public License is available at 1003928aee4356845252ac6b662d5c72c29903813eJake Slack// http://www.eclipse.org/legal/epl-v10.html 1103928aee4356845252ac6b662d5c72c29903813eJake Slack// 1203928aee4356845252ac6b662d5c72c29903813eJake Slack// The Apache License v2.0 is available at 1303928aee4356845252ac6b662d5c72c29903813eJake Slack// http://www.opensource.org/licenses/apache2.0.php 1403928aee4356845252ac6b662d5c72c29903813eJake Slack// 1503928aee4356845252ac6b662d5c72c29903813eJake Slack// You may elect to redistribute this code under either of these licenses. 1603928aee4356845252ac6b662d5c72c29903813eJake Slack// ======================================================================== 1703928aee4356845252ac6b662d5c72c29903813eJake Slack// 1803928aee4356845252ac6b662d5c72c29903813eJake Slack 1903928aee4356845252ac6b662d5c72c29903813eJake Slackpackage org.eclipse.jetty.util.log; 2003928aee4356845252ac6b662d5c72c29903813eJake Slack 2103928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.io.IOException; 2203928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.io.InputStream; 2303928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.lang.reflect.Method; 2403928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.net.URL; 2503928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.security.AccessController; 2603928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.security.PrivilegedAction; 2703928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.Collection; 2803928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.Collections; 2903928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.Enumeration; 3003928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.HashMap; 3103928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.Map; 3203928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.Properties; 3303928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.concurrent.ConcurrentHashMap; 3403928aee4356845252ac6b662d5c72c29903813eJake Slackimport java.util.concurrent.ConcurrentMap; 3503928aee4356845252ac6b662d5c72c29903813eJake Slack 3603928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.IO; 3703928aee4356845252ac6b662d5c72c29903813eJake Slackimport org.eclipse.jetty.util.Loader; 3803928aee4356845252ac6b662d5c72c29903813eJake Slack 3903928aee4356845252ac6b662d5c72c29903813eJake Slack/** 4003928aee4356845252ac6b662d5c72c29903813eJake Slack * Logging. 4103928aee4356845252ac6b662d5c72c29903813eJake Slack * This class provides a static logging interface. If an instance of the 4203928aee4356845252ac6b662d5c72c29903813eJake Slack * org.slf4j.Logger class is found on the classpath, the static log methods 4303928aee4356845252ac6b662d5c72c29903813eJake Slack * are directed to a slf4j logger for "org.eclipse.log". Otherwise the logs 4403928aee4356845252ac6b662d5c72c29903813eJake Slack * are directed to stderr. 4503928aee4356845252ac6b662d5c72c29903813eJake Slack * <p> 4603928aee4356845252ac6b662d5c72c29903813eJake Slack * The "org.eclipse.jetty.util.log.class" system property can be used 4703928aee4356845252ac6b662d5c72c29903813eJake Slack * to select a specific logging implementation. 4803928aee4356845252ac6b662d5c72c29903813eJake Slack * <p> 4903928aee4356845252ac6b662d5c72c29903813eJake Slack * If the system property org.eclipse.jetty.util.log.IGNORED is set, 5003928aee4356845252ac6b662d5c72c29903813eJake Slack * then ignored exceptions are logged in detail. 5103928aee4356845252ac6b662d5c72c29903813eJake Slack * 5203928aee4356845252ac6b662d5c72c29903813eJake Slack * @see StdErrLog 5303928aee4356845252ac6b662d5c72c29903813eJake Slack * @see Slf4jLog 5403928aee4356845252ac6b662d5c72c29903813eJake Slack */ 5503928aee4356845252ac6b662d5c72c29903813eJake Slackpublic class Log 5603928aee4356845252ac6b662d5c72c29903813eJake Slack{ 5703928aee4356845252ac6b662d5c72c29903813eJake Slack public final static String EXCEPTION= "EXCEPTION "; 5803928aee4356845252ac6b662d5c72c29903813eJake Slack public final static String IGNORED= "IGNORED "; 5903928aee4356845252ac6b662d5c72c29903813eJake Slack 6003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 6103928aee4356845252ac6b662d5c72c29903813eJake Slack * Logging Configuration Properties 6203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 6303928aee4356845252ac6b662d5c72c29903813eJake Slack protected static Properties __props; 6403928aee4356845252ac6b662d5c72c29903813eJake Slack /** 6503928aee4356845252ac6b662d5c72c29903813eJake Slack * The {@link Logger} implementation class name 6603928aee4356845252ac6b662d5c72c29903813eJake Slack */ 6703928aee4356845252ac6b662d5c72c29903813eJake Slack public static String __logClass; 6803928aee4356845252ac6b662d5c72c29903813eJake Slack /** 6903928aee4356845252ac6b662d5c72c29903813eJake Slack * Legacy flag indicating if {@link Log#ignore(Throwable)} methods produce any output in the {@link Logger}s 7003928aee4356845252ac6b662d5c72c29903813eJake Slack */ 7103928aee4356845252ac6b662d5c72c29903813eJake Slack public static boolean __ignored; 7203928aee4356845252ac6b662d5c72c29903813eJake Slack 7303928aee4356845252ac6b662d5c72c29903813eJake Slack /** 7403928aee4356845252ac6b662d5c72c29903813eJake Slack * Hold loggers only. 7503928aee4356845252ac6b662d5c72c29903813eJake Slack */ 7603928aee4356845252ac6b662d5c72c29903813eJake Slack private final static ConcurrentMap<String, Logger> __loggers = new ConcurrentHashMap<String, Logger>(); 7703928aee4356845252ac6b662d5c72c29903813eJake Slack 7803928aee4356845252ac6b662d5c72c29903813eJake Slack 7903928aee4356845252ac6b662d5c72c29903813eJake Slack static 8003928aee4356845252ac6b662d5c72c29903813eJake Slack { 8103928aee4356845252ac6b662d5c72c29903813eJake Slack /* Instantiate a default configuration properties (empty) 8203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 8303928aee4356845252ac6b662d5c72c29903813eJake Slack __props = new Properties(); 8403928aee4356845252ac6b662d5c72c29903813eJake Slack 8503928aee4356845252ac6b662d5c72c29903813eJake Slack AccessController.doPrivileged(new PrivilegedAction<Object>() 8603928aee4356845252ac6b662d5c72c29903813eJake Slack { 8703928aee4356845252ac6b662d5c72c29903813eJake Slack public Object run() 8803928aee4356845252ac6b662d5c72c29903813eJake Slack { 8903928aee4356845252ac6b662d5c72c29903813eJake Slack /* First see if the jetty-logging.properties object exists in the classpath. 9003928aee4356845252ac6b662d5c72c29903813eJake Slack * This is an optional feature used by embedded mode use, and test cases to allow for early 9103928aee4356845252ac6b662d5c72c29903813eJake Slack * configuration of the Log class in situations where access to the System.properties are 9203928aee4356845252ac6b662d5c72c29903813eJake Slack * either too late or just impossible. 9303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 9403928aee4356845252ac6b662d5c72c29903813eJake Slack URL testProps = Loader.getResource(Log.class,"jetty-logging.properties",true); 9503928aee4356845252ac6b662d5c72c29903813eJake Slack if (testProps != null) 9603928aee4356845252ac6b662d5c72c29903813eJake Slack { 9703928aee4356845252ac6b662d5c72c29903813eJake Slack InputStream in = null; 9803928aee4356845252ac6b662d5c72c29903813eJake Slack try 9903928aee4356845252ac6b662d5c72c29903813eJake Slack { 10003928aee4356845252ac6b662d5c72c29903813eJake Slack in = testProps.openStream(); 10103928aee4356845252ac6b662d5c72c29903813eJake Slack __props.load(in); 10203928aee4356845252ac6b662d5c72c29903813eJake Slack } 10303928aee4356845252ac6b662d5c72c29903813eJake Slack catch (IOException e) 10403928aee4356845252ac6b662d5c72c29903813eJake Slack { 10503928aee4356845252ac6b662d5c72c29903813eJake Slack System.err.println("Unable to load " + testProps); 10603928aee4356845252ac6b662d5c72c29903813eJake Slack e.printStackTrace(System.err); 10703928aee4356845252ac6b662d5c72c29903813eJake Slack } 10803928aee4356845252ac6b662d5c72c29903813eJake Slack finally 10903928aee4356845252ac6b662d5c72c29903813eJake Slack { 11003928aee4356845252ac6b662d5c72c29903813eJake Slack IO.close(in); 11103928aee4356845252ac6b662d5c72c29903813eJake Slack } 11203928aee4356845252ac6b662d5c72c29903813eJake Slack } 11303928aee4356845252ac6b662d5c72c29903813eJake Slack 11403928aee4356845252ac6b662d5c72c29903813eJake Slack /* Now load the System.properties as-is into the __props, these values will override 11503928aee4356845252ac6b662d5c72c29903813eJake Slack * any key conflicts in __props. 11603928aee4356845252ac6b662d5c72c29903813eJake Slack */ 11703928aee4356845252ac6b662d5c72c29903813eJake Slack @SuppressWarnings("unchecked") 11803928aee4356845252ac6b662d5c72c29903813eJake Slack Enumeration<String> systemKeyEnum = (Enumeration<String>)System.getProperties().propertyNames(); 11903928aee4356845252ac6b662d5c72c29903813eJake Slack while (systemKeyEnum.hasMoreElements()) 12003928aee4356845252ac6b662d5c72c29903813eJake Slack { 12103928aee4356845252ac6b662d5c72c29903813eJake Slack String key = systemKeyEnum.nextElement(); 12203928aee4356845252ac6b662d5c72c29903813eJake Slack String val = System.getProperty(key); 12303928aee4356845252ac6b662d5c72c29903813eJake Slack //protect against application code insertion of non-String values (returned as null) 12403928aee4356845252ac6b662d5c72c29903813eJake Slack if (val != null) 12503928aee4356845252ac6b662d5c72c29903813eJake Slack __props.setProperty(key,val); 12603928aee4356845252ac6b662d5c72c29903813eJake Slack } 12703928aee4356845252ac6b662d5c72c29903813eJake Slack 12803928aee4356845252ac6b662d5c72c29903813eJake Slack /* Now use the configuration properties to configure the Log statics 12903928aee4356845252ac6b662d5c72c29903813eJake Slack */ 13003928aee4356845252ac6b662d5c72c29903813eJake Slack __logClass = __props.getProperty("org.eclipse.jetty.util.log.class","org.eclipse.jetty.util.log.Slf4jLog"); 13103928aee4356845252ac6b662d5c72c29903813eJake Slack __ignored = Boolean.parseBoolean(__props.getProperty("org.eclipse.jetty.util.log.IGNORED","false")); 13203928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 13303928aee4356845252ac6b662d5c72c29903813eJake Slack } 13403928aee4356845252ac6b662d5c72c29903813eJake Slack }); 13503928aee4356845252ac6b662d5c72c29903813eJake Slack } 13603928aee4356845252ac6b662d5c72c29903813eJake Slack 13703928aee4356845252ac6b662d5c72c29903813eJake Slack private static Logger LOG; 13803928aee4356845252ac6b662d5c72c29903813eJake Slack private static boolean __initialized; 13903928aee4356845252ac6b662d5c72c29903813eJake Slack 14003928aee4356845252ac6b662d5c72c29903813eJake Slack public static boolean initialized() 14103928aee4356845252ac6b662d5c72c29903813eJake Slack { 14203928aee4356845252ac6b662d5c72c29903813eJake Slack if (LOG != null) 14303928aee4356845252ac6b662d5c72c29903813eJake Slack { 14403928aee4356845252ac6b662d5c72c29903813eJake Slack return true; 14503928aee4356845252ac6b662d5c72c29903813eJake Slack } 14603928aee4356845252ac6b662d5c72c29903813eJake Slack 14703928aee4356845252ac6b662d5c72c29903813eJake Slack synchronized (Log.class) 14803928aee4356845252ac6b662d5c72c29903813eJake Slack { 14903928aee4356845252ac6b662d5c72c29903813eJake Slack if (__initialized) 15003928aee4356845252ac6b662d5c72c29903813eJake Slack { 15103928aee4356845252ac6b662d5c72c29903813eJake Slack return LOG != null; 15203928aee4356845252ac6b662d5c72c29903813eJake Slack } 15303928aee4356845252ac6b662d5c72c29903813eJake Slack __initialized = true; 15403928aee4356845252ac6b662d5c72c29903813eJake Slack } 15503928aee4356845252ac6b662d5c72c29903813eJake Slack 15603928aee4356845252ac6b662d5c72c29903813eJake Slack try 15703928aee4356845252ac6b662d5c72c29903813eJake Slack { 15803928aee4356845252ac6b662d5c72c29903813eJake Slack Class<?> log_class = Loader.loadClass(Log.class, __logClass); 15903928aee4356845252ac6b662d5c72c29903813eJake Slack if (LOG == null || !LOG.getClass().equals(log_class)) 16003928aee4356845252ac6b662d5c72c29903813eJake Slack { 16103928aee4356845252ac6b662d5c72c29903813eJake Slack LOG = (Logger)log_class.newInstance(); 16203928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.debug("Logging to {} via {}", LOG, log_class.getName()); 16303928aee4356845252ac6b662d5c72c29903813eJake Slack } 16403928aee4356845252ac6b662d5c72c29903813eJake Slack } 16503928aee4356845252ac6b662d5c72c29903813eJake Slack catch(Throwable e) 16603928aee4356845252ac6b662d5c72c29903813eJake Slack { 16703928aee4356845252ac6b662d5c72c29903813eJake Slack // Unable to load specified Logger implementation, default to standard logging. 16803928aee4356845252ac6b662d5c72c29903813eJake Slack initStandardLogging(e); 16903928aee4356845252ac6b662d5c72c29903813eJake Slack } 17003928aee4356845252ac6b662d5c72c29903813eJake Slack 17103928aee4356845252ac6b662d5c72c29903813eJake Slack return LOG != null; 17203928aee4356845252ac6b662d5c72c29903813eJake Slack } 17303928aee4356845252ac6b662d5c72c29903813eJake Slack 17403928aee4356845252ac6b662d5c72c29903813eJake Slack private static void initStandardLogging(Throwable e) 17503928aee4356845252ac6b662d5c72c29903813eJake Slack { 17603928aee4356845252ac6b662d5c72c29903813eJake Slack Class<?> log_class; 17703928aee4356845252ac6b662d5c72c29903813eJake Slack if(e != null && __ignored) 17803928aee4356845252ac6b662d5c72c29903813eJake Slack { 17903928aee4356845252ac6b662d5c72c29903813eJake Slack e.printStackTrace(); 18003928aee4356845252ac6b662d5c72c29903813eJake Slack } 18103928aee4356845252ac6b662d5c72c29903813eJake Slack 18203928aee4356845252ac6b662d5c72c29903813eJake Slack if (LOG == null) 18303928aee4356845252ac6b662d5c72c29903813eJake Slack { 18403928aee4356845252ac6b662d5c72c29903813eJake Slack log_class = StdErrLog.class; 18503928aee4356845252ac6b662d5c72c29903813eJake Slack LOG = new StdErrLog(); 18603928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.debug("Logging to {} via {}", LOG, log_class.getName()); 18703928aee4356845252ac6b662d5c72c29903813eJake Slack } 18803928aee4356845252ac6b662d5c72c29903813eJake Slack } 18903928aee4356845252ac6b662d5c72c29903813eJake Slack 19003928aee4356845252ac6b662d5c72c29903813eJake Slack public static void setLog(Logger log) 19103928aee4356845252ac6b662d5c72c29903813eJake Slack { 19203928aee4356845252ac6b662d5c72c29903813eJake Slack Log.LOG = log; 19303928aee4356845252ac6b662d5c72c29903813eJake Slack } 19403928aee4356845252ac6b662d5c72c29903813eJake Slack 19503928aee4356845252ac6b662d5c72c29903813eJake Slack /** 19603928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 19703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 19803928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 19903928aee4356845252ac6b662d5c72c29903813eJake Slack public static Logger getLog() 20003928aee4356845252ac6b662d5c72c29903813eJake Slack { 20103928aee4356845252ac6b662d5c72c29903813eJake Slack initialized(); 20203928aee4356845252ac6b662d5c72c29903813eJake Slack return LOG; 20303928aee4356845252ac6b662d5c72c29903813eJake Slack } 20403928aee4356845252ac6b662d5c72c29903813eJake Slack 20503928aee4356845252ac6b662d5c72c29903813eJake Slack /** 20603928aee4356845252ac6b662d5c72c29903813eJake Slack * Get the root logger. 20703928aee4356845252ac6b662d5c72c29903813eJake Slack * @return the root logger 20803928aee4356845252ac6b662d5c72c29903813eJake Slack */ 20903928aee4356845252ac6b662d5c72c29903813eJake Slack public static Logger getRootLogger() { 21003928aee4356845252ac6b662d5c72c29903813eJake Slack initialized(); 21103928aee4356845252ac6b662d5c72c29903813eJake Slack return LOG; 21203928aee4356845252ac6b662d5c72c29903813eJake Slack } 21303928aee4356845252ac6b662d5c72c29903813eJake Slack 21403928aee4356845252ac6b662d5c72c29903813eJake Slack static boolean isIgnored() 21503928aee4356845252ac6b662d5c72c29903813eJake Slack { 21603928aee4356845252ac6b662d5c72c29903813eJake Slack return __ignored; 21703928aee4356845252ac6b662d5c72c29903813eJake Slack } 21803928aee4356845252ac6b662d5c72c29903813eJake Slack 21903928aee4356845252ac6b662d5c72c29903813eJake Slack /** 22003928aee4356845252ac6b662d5c72c29903813eJake Slack * Set Log to parent Logger. 22103928aee4356845252ac6b662d5c72c29903813eJake Slack * <p> 22203928aee4356845252ac6b662d5c72c29903813eJake Slack * If there is a different Log class available from a parent classloader, 22303928aee4356845252ac6b662d5c72c29903813eJake Slack * call {@link #getLogger(String)} on it and construct a {@link LoggerLog} instance 22403928aee4356845252ac6b662d5c72c29903813eJake Slack * as this Log's Logger, so that logging is delegated to the parent Log. 22503928aee4356845252ac6b662d5c72c29903813eJake Slack * <p> 22603928aee4356845252ac6b662d5c72c29903813eJake Slack * This should be used if a webapp is using Log, but wishes the logging to be 22703928aee4356845252ac6b662d5c72c29903813eJake Slack * directed to the containers log. 22803928aee4356845252ac6b662d5c72c29903813eJake Slack * <p> 22903928aee4356845252ac6b662d5c72c29903813eJake Slack * If there is not parent Log, then this call is equivalent to<pre> 23003928aee4356845252ac6b662d5c72c29903813eJake Slack * Log.setLog(Log.getLogger(name)); 23103928aee4356845252ac6b662d5c72c29903813eJake Slack * </pre> 23203928aee4356845252ac6b662d5c72c29903813eJake Slack * @param name Logger name 23303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 23403928aee4356845252ac6b662d5c72c29903813eJake Slack public static void setLogToParent(String name) 23503928aee4356845252ac6b662d5c72c29903813eJake Slack { 23603928aee4356845252ac6b662d5c72c29903813eJake Slack ClassLoader loader = Log.class.getClassLoader(); 23703928aee4356845252ac6b662d5c72c29903813eJake Slack if (loader!=null && loader.getParent()!=null) 23803928aee4356845252ac6b662d5c72c29903813eJake Slack { 23903928aee4356845252ac6b662d5c72c29903813eJake Slack try 24003928aee4356845252ac6b662d5c72c29903813eJake Slack { 24103928aee4356845252ac6b662d5c72c29903813eJake Slack Class<?> uberlog = loader.getParent().loadClass("org.eclipse.jetty.util.log.Log"); 24203928aee4356845252ac6b662d5c72c29903813eJake Slack Method getLogger = uberlog.getMethod("getLogger", new Class[]{String.class}); 24303928aee4356845252ac6b662d5c72c29903813eJake Slack Object logger = getLogger.invoke(null,name); 24403928aee4356845252ac6b662d5c72c29903813eJake Slack setLog(new LoggerLog(logger)); 24503928aee4356845252ac6b662d5c72c29903813eJake Slack } 24603928aee4356845252ac6b662d5c72c29903813eJake Slack catch (Exception e) 24703928aee4356845252ac6b662d5c72c29903813eJake Slack { 24803928aee4356845252ac6b662d5c72c29903813eJake Slack e.printStackTrace(); 24903928aee4356845252ac6b662d5c72c29903813eJake Slack } 25003928aee4356845252ac6b662d5c72c29903813eJake Slack } 25103928aee4356845252ac6b662d5c72c29903813eJake Slack else 25203928aee4356845252ac6b662d5c72c29903813eJake Slack { 25303928aee4356845252ac6b662d5c72c29903813eJake Slack setLog(getLogger(name)); 25403928aee4356845252ac6b662d5c72c29903813eJake Slack } 25503928aee4356845252ac6b662d5c72c29903813eJake Slack } 25603928aee4356845252ac6b662d5c72c29903813eJake Slack 25703928aee4356845252ac6b662d5c72c29903813eJake Slack /** 25803928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 25903928aee4356845252ac6b662d5c72c29903813eJake Slack */ 26003928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 26103928aee4356845252ac6b662d5c72c29903813eJake Slack public static void debug(Throwable th) 26203928aee4356845252ac6b662d5c72c29903813eJake Slack { 26303928aee4356845252ac6b662d5c72c29903813eJake Slack if (!isDebugEnabled()) 26403928aee4356845252ac6b662d5c72c29903813eJake Slack return; 26503928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.debug(EXCEPTION, th); 26603928aee4356845252ac6b662d5c72c29903813eJake Slack } 26703928aee4356845252ac6b662d5c72c29903813eJake Slack 26803928aee4356845252ac6b662d5c72c29903813eJake Slack /** 26903928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 27003928aee4356845252ac6b662d5c72c29903813eJake Slack */ 27103928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 27203928aee4356845252ac6b662d5c72c29903813eJake Slack public static void debug(String msg) 27303928aee4356845252ac6b662d5c72c29903813eJake Slack { 27403928aee4356845252ac6b662d5c72c29903813eJake Slack if (!initialized()) 27503928aee4356845252ac6b662d5c72c29903813eJake Slack return; 27603928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.debug(msg); 27703928aee4356845252ac6b662d5c72c29903813eJake Slack } 27803928aee4356845252ac6b662d5c72c29903813eJake Slack 27903928aee4356845252ac6b662d5c72c29903813eJake Slack /** 28003928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 28103928aee4356845252ac6b662d5c72c29903813eJake Slack */ 28203928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 28303928aee4356845252ac6b662d5c72c29903813eJake Slack public static void debug(String msg, Object arg) 28403928aee4356845252ac6b662d5c72c29903813eJake Slack { 28503928aee4356845252ac6b662d5c72c29903813eJake Slack if (!initialized()) 28603928aee4356845252ac6b662d5c72c29903813eJake Slack return; 28703928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.debug(msg, arg); 28803928aee4356845252ac6b662d5c72c29903813eJake Slack } 28903928aee4356845252ac6b662d5c72c29903813eJake Slack 29003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 29103928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 29203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 29303928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 29403928aee4356845252ac6b662d5c72c29903813eJake Slack public static void debug(String msg, Object arg0, Object arg1) 29503928aee4356845252ac6b662d5c72c29903813eJake Slack { 29603928aee4356845252ac6b662d5c72c29903813eJake Slack if (!initialized()) 29703928aee4356845252ac6b662d5c72c29903813eJake Slack return; 29803928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.debug(msg, arg0, arg1); 29903928aee4356845252ac6b662d5c72c29903813eJake Slack } 30003928aee4356845252ac6b662d5c72c29903813eJake Slack 30103928aee4356845252ac6b662d5c72c29903813eJake Slack /** 30203928aee4356845252ac6b662d5c72c29903813eJake Slack * Ignore an exception unless trace is enabled. 30303928aee4356845252ac6b662d5c72c29903813eJake Slack * This works around the problem that log4j does not support the trace level. 30403928aee4356845252ac6b662d5c72c29903813eJake Slack * @param thrown the Throwable to ignore 30503928aee4356845252ac6b662d5c72c29903813eJake Slack */ 30603928aee4356845252ac6b662d5c72c29903813eJake Slack /** 30703928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 30803928aee4356845252ac6b662d5c72c29903813eJake Slack */ 30903928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 31003928aee4356845252ac6b662d5c72c29903813eJake Slack public static void ignore(Throwable thrown) 31103928aee4356845252ac6b662d5c72c29903813eJake Slack { 31203928aee4356845252ac6b662d5c72c29903813eJake Slack if (!initialized()) 31303928aee4356845252ac6b662d5c72c29903813eJake Slack return; 31403928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.ignore(thrown); 31503928aee4356845252ac6b662d5c72c29903813eJake Slack } 31603928aee4356845252ac6b662d5c72c29903813eJake Slack 31703928aee4356845252ac6b662d5c72c29903813eJake Slack /** 31803928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 31903928aee4356845252ac6b662d5c72c29903813eJake Slack */ 32003928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 32103928aee4356845252ac6b662d5c72c29903813eJake Slack public static void info(String msg) 32203928aee4356845252ac6b662d5c72c29903813eJake Slack { 32303928aee4356845252ac6b662d5c72c29903813eJake Slack if (!initialized()) 32403928aee4356845252ac6b662d5c72c29903813eJake Slack return; 32503928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.info(msg); 32603928aee4356845252ac6b662d5c72c29903813eJake Slack } 32703928aee4356845252ac6b662d5c72c29903813eJake Slack 32803928aee4356845252ac6b662d5c72c29903813eJake Slack /** 32903928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 33003928aee4356845252ac6b662d5c72c29903813eJake Slack */ 33103928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 33203928aee4356845252ac6b662d5c72c29903813eJake Slack public static void info(String msg, Object arg) 33303928aee4356845252ac6b662d5c72c29903813eJake Slack { 33403928aee4356845252ac6b662d5c72c29903813eJake Slack if (!initialized()) 33503928aee4356845252ac6b662d5c72c29903813eJake Slack return; 33603928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.info(msg, arg); 33703928aee4356845252ac6b662d5c72c29903813eJake Slack } 33803928aee4356845252ac6b662d5c72c29903813eJake Slack 33903928aee4356845252ac6b662d5c72c29903813eJake Slack /** 34003928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 34103928aee4356845252ac6b662d5c72c29903813eJake Slack */ 34203928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 34303928aee4356845252ac6b662d5c72c29903813eJake Slack public static void info(String msg, Object arg0, Object arg1) 34403928aee4356845252ac6b662d5c72c29903813eJake Slack { 34503928aee4356845252ac6b662d5c72c29903813eJake Slack if (!initialized()) 34603928aee4356845252ac6b662d5c72c29903813eJake Slack return; 34703928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.info(msg, arg0, arg1); 34803928aee4356845252ac6b662d5c72c29903813eJake Slack } 34903928aee4356845252ac6b662d5c72c29903813eJake Slack 35003928aee4356845252ac6b662d5c72c29903813eJake Slack /** 35103928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 35203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 35303928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 35403928aee4356845252ac6b662d5c72c29903813eJake Slack public static boolean isDebugEnabled() 35503928aee4356845252ac6b662d5c72c29903813eJake Slack { 35603928aee4356845252ac6b662d5c72c29903813eJake Slack if (!initialized()) 35703928aee4356845252ac6b662d5c72c29903813eJake Slack return false; 35803928aee4356845252ac6b662d5c72c29903813eJake Slack return LOG.isDebugEnabled(); 35903928aee4356845252ac6b662d5c72c29903813eJake Slack } 36003928aee4356845252ac6b662d5c72c29903813eJake Slack 36103928aee4356845252ac6b662d5c72c29903813eJake Slack /** 36203928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 36303928aee4356845252ac6b662d5c72c29903813eJake Slack */ 36403928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 36503928aee4356845252ac6b662d5c72c29903813eJake Slack public static void warn(String msg) 36603928aee4356845252ac6b662d5c72c29903813eJake Slack { 36703928aee4356845252ac6b662d5c72c29903813eJake Slack if (!initialized()) 36803928aee4356845252ac6b662d5c72c29903813eJake Slack return; 36903928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.warn(msg); 37003928aee4356845252ac6b662d5c72c29903813eJake Slack } 37103928aee4356845252ac6b662d5c72c29903813eJake Slack 37203928aee4356845252ac6b662d5c72c29903813eJake Slack /** 37303928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 37403928aee4356845252ac6b662d5c72c29903813eJake Slack */ 37503928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 37603928aee4356845252ac6b662d5c72c29903813eJake Slack public static void warn(String msg, Object arg) 37703928aee4356845252ac6b662d5c72c29903813eJake Slack { 37803928aee4356845252ac6b662d5c72c29903813eJake Slack if (!initialized()) 37903928aee4356845252ac6b662d5c72c29903813eJake Slack return; 38003928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.warn(msg, arg); 38103928aee4356845252ac6b662d5c72c29903813eJake Slack } 38203928aee4356845252ac6b662d5c72c29903813eJake Slack 38303928aee4356845252ac6b662d5c72c29903813eJake Slack /** 38403928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 38503928aee4356845252ac6b662d5c72c29903813eJake Slack */ 38603928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 38703928aee4356845252ac6b662d5c72c29903813eJake Slack public static void warn(String msg, Object arg0, Object arg1) 38803928aee4356845252ac6b662d5c72c29903813eJake Slack { 38903928aee4356845252ac6b662d5c72c29903813eJake Slack if (!initialized()) 39003928aee4356845252ac6b662d5c72c29903813eJake Slack return; 39103928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.warn(msg, arg0, arg1); 39203928aee4356845252ac6b662d5c72c29903813eJake Slack } 39303928aee4356845252ac6b662d5c72c29903813eJake Slack 39403928aee4356845252ac6b662d5c72c29903813eJake Slack /** 39503928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 39603928aee4356845252ac6b662d5c72c29903813eJake Slack */ 39703928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 39803928aee4356845252ac6b662d5c72c29903813eJake Slack public static void warn(String msg, Throwable th) 39903928aee4356845252ac6b662d5c72c29903813eJake Slack { 40003928aee4356845252ac6b662d5c72c29903813eJake Slack if (!initialized()) 40103928aee4356845252ac6b662d5c72c29903813eJake Slack return; 40203928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.warn(msg, th); 40303928aee4356845252ac6b662d5c72c29903813eJake Slack } 40403928aee4356845252ac6b662d5c72c29903813eJake Slack 40503928aee4356845252ac6b662d5c72c29903813eJake Slack /** 40603928aee4356845252ac6b662d5c72c29903813eJake Slack * @deprecated anonymous logging is deprecated, use a named {@link Logger} obtained from {@link #getLogger(String)} 40703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 40803928aee4356845252ac6b662d5c72c29903813eJake Slack @Deprecated 40903928aee4356845252ac6b662d5c72c29903813eJake Slack public static void warn(Throwable th) 41003928aee4356845252ac6b662d5c72c29903813eJake Slack { 41103928aee4356845252ac6b662d5c72c29903813eJake Slack if (!initialized()) 41203928aee4356845252ac6b662d5c72c29903813eJake Slack return; 41303928aee4356845252ac6b662d5c72c29903813eJake Slack LOG.warn(EXCEPTION, th); 41403928aee4356845252ac6b662d5c72c29903813eJake Slack } 41503928aee4356845252ac6b662d5c72c29903813eJake Slack 41603928aee4356845252ac6b662d5c72c29903813eJake Slack /** 41703928aee4356845252ac6b662d5c72c29903813eJake Slack * Obtain a named Logger based on the fully qualified class name. 41803928aee4356845252ac6b662d5c72c29903813eJake Slack * 41903928aee4356845252ac6b662d5c72c29903813eJake Slack * @param clazz 42003928aee4356845252ac6b662d5c72c29903813eJake Slack * the class to base the Logger name off of 42103928aee4356845252ac6b662d5c72c29903813eJake Slack * @return the Logger with the given name 42203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 42303928aee4356845252ac6b662d5c72c29903813eJake Slack public static Logger getLogger(Class<?> clazz) 42403928aee4356845252ac6b662d5c72c29903813eJake Slack { 42503928aee4356845252ac6b662d5c72c29903813eJake Slack return getLogger(clazz.getName()); 42603928aee4356845252ac6b662d5c72c29903813eJake Slack } 42703928aee4356845252ac6b662d5c72c29903813eJake Slack 42803928aee4356845252ac6b662d5c72c29903813eJake Slack /** 42903928aee4356845252ac6b662d5c72c29903813eJake Slack * Obtain a named Logger or the default Logger if null is passed. 43003928aee4356845252ac6b662d5c72c29903813eJake Slack * @param name the Logger name 43103928aee4356845252ac6b662d5c72c29903813eJake Slack * @return the Logger with the given name 43203928aee4356845252ac6b662d5c72c29903813eJake Slack */ 43303928aee4356845252ac6b662d5c72c29903813eJake Slack public static Logger getLogger(String name) 43403928aee4356845252ac6b662d5c72c29903813eJake Slack { 43503928aee4356845252ac6b662d5c72c29903813eJake Slack if (!initialized()) 43603928aee4356845252ac6b662d5c72c29903813eJake Slack return null; 43703928aee4356845252ac6b662d5c72c29903813eJake Slack 43803928aee4356845252ac6b662d5c72c29903813eJake Slack if(name==null) 43903928aee4356845252ac6b662d5c72c29903813eJake Slack return LOG; 44003928aee4356845252ac6b662d5c72c29903813eJake Slack 44103928aee4356845252ac6b662d5c72c29903813eJake Slack Logger logger = __loggers.get(name); 44203928aee4356845252ac6b662d5c72c29903813eJake Slack if(logger==null) 44303928aee4356845252ac6b662d5c72c29903813eJake Slack logger = LOG.getLogger(name); 44403928aee4356845252ac6b662d5c72c29903813eJake Slack 44503928aee4356845252ac6b662d5c72c29903813eJake Slack return logger; 44603928aee4356845252ac6b662d5c72c29903813eJake Slack } 44703928aee4356845252ac6b662d5c72c29903813eJake Slack 44803928aee4356845252ac6b662d5c72c29903813eJake Slack static ConcurrentMap<String, Logger> getMutableLoggers() 44903928aee4356845252ac6b662d5c72c29903813eJake Slack { 45003928aee4356845252ac6b662d5c72c29903813eJake Slack return __loggers; 45103928aee4356845252ac6b662d5c72c29903813eJake Slack } 45203928aee4356845252ac6b662d5c72c29903813eJake Slack 45303928aee4356845252ac6b662d5c72c29903813eJake Slack /** 45403928aee4356845252ac6b662d5c72c29903813eJake Slack * Get a map of all configured {@link Logger} instances. 45503928aee4356845252ac6b662d5c72c29903813eJake Slack * 45603928aee4356845252ac6b662d5c72c29903813eJake Slack * @return a map of all configured {@link Logger} instances 45703928aee4356845252ac6b662d5c72c29903813eJake Slack */ 45803928aee4356845252ac6b662d5c72c29903813eJake Slack public static Map<String, Logger> getLoggers() 45903928aee4356845252ac6b662d5c72c29903813eJake Slack { 46003928aee4356845252ac6b662d5c72c29903813eJake Slack return Collections.unmodifiableMap(__loggers); 46103928aee4356845252ac6b662d5c72c29903813eJake Slack } 46203928aee4356845252ac6b662d5c72c29903813eJake Slack} 463