001 /** 002 * 003 * Copyright 2003-2004 The Apache Software Foundation 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.geronimo.kernel.log; 019 020 import java.lang.reflect.Method; 021 import java.util.Map; 022 import java.util.HashMap; 023 024 import org.apache.commons.logging.LogFactory; 025 026 /** 027 * @version $Rev: 438786 $ $Date: 2006-08-30 21:35:25 -0700 (Wed, 30 Aug 2006) $ 028 */ 029 public class GeronimoLogging { 030 031 //this needs to go before the instance constants or you get an NPE in the constructor. 032 private static final Map levels = new HashMap(); 033 034 public static final GeronimoLogging TRACE = new GeronimoLogging("TRACE"); 035 public static final GeronimoLogging DEBUG = new GeronimoLogging("DEBUG"); 036 public static final GeronimoLogging INFO = new GeronimoLogging("INFO"); 037 public static final GeronimoLogging WARN = new GeronimoLogging("WARN"); 038 public static final GeronimoLogging ERROR = new GeronimoLogging("ERROR"); 039 public static final GeronimoLogging FATAL = new GeronimoLogging("FATAL"); 040 041 private static boolean initialized = false; 042 private static GeronimoLogging consoleLogLevel = ERROR; 043 private static GeronimoLogging defaultLevel; 044 045 /** 046 * Initializes the logging system used by Geronimo. This MUST be called in 047 * in the main class used to start the geronimo server. This method forces 048 * commons logging to use GeronimoLogFactory, starts the initial commons-logging 049 * logging system, and forces mx4j to use commons logging. 050 */ 051 public static void initialize(GeronimoLogging level) { 052 if (!initialized) { 053 defaultLevel = level; 054 consoleLogLevel = level; 055 056 // force the log factory to initialize 057 LogFactory.getLog(GeronimoLogging.class); 058 059 // force mx4j to use commons logging 060 // Use reflection so mx4j is not required (this is important in JDK 1.5) 061 // mx4j.log.Log.redirectTo(new mx4j.log.CommonsLogger()); 062 try { 063 Class clazz = Class.forName("mx4j.log.Log"); 064 Class paramClazz = Class.forName("mx4j.log.Logger"); 065 Method method = clazz.getDeclaredMethod("redirectTo", new Class[] {paramClazz}); 066 paramClazz = Class.forName("mx4j.log.CommonsLogger"); 067 method.invoke(null, new Object[] {paramClazz.newInstance()}); 068 } catch (ClassNotFoundException e) { 069 // MX4J is not present. 070 } catch (Exception e) { 071 throw (AssertionError) new AssertionError("Cannot force MX4J to use commons logging.").initCause(e); 072 } 073 074 initialized = true; 075 } 076 } 077 078 public static void setDefaultLogLevel(GeronimoLogging level) { 079 defaultLevel = level; 080 } 081 082 public static GeronimoLogging getDefaultLevel() { 083 return defaultLevel; 084 } 085 086 public static GeronimoLogging getConsoleLogLevel() { 087 return consoleLogLevel; 088 } 089 090 public static void setConsoleLogLevel(GeronimoLogging consoleLogLevel) { 091 GeronimoLogging.consoleLogLevel = consoleLogLevel; 092 } 093 094 public static GeronimoLogging getGeronimoLogging(String level) { 095 return (GeronimoLogging) levels.get(level); 096 } 097 098 private final String level; 099 100 private GeronimoLogging(String level) { 101 this.level = level; 102 levels.put(level, this); 103 } 104 105 public String toString() { 106 return level; 107 } 108 109 /** 110 * Check if the Geronimo bootstrap logging initialization is enabled. 111 * 112 * <p>Checks the system property <tt>geronimo.bootstrap.logging.enabled</tt> 113 * if not set, or set to "true" then bootstrap logging initialization is enabled. 114 * 115 * @return True of bootstrap logging initialization is enabled. 116 */ 117 public static boolean isBootstrapLoggingInitializationEnabled() { 118 String value = System.getProperty("geronimo.bootstrap.logging.enabled"); 119 if (value == null) { 120 return true; 121 } 122 else { 123 return Boolean.valueOf(value).booleanValue(); 124 } 125 } 126 }