arminw 2005/11/19 05:33:56
Modified: src/java/org/apache/ojb/broker/util/logging
CommonsLoggerImpl.java Log4jLoggerImpl.java
LoggerFactoryImpl.java PoorMansLoggerImpl.java
src/test/org/apache/ojb commons-logging.properties
log4j.properties OJB-logging.properties
Added: src/java/org/apache/ojb/broker/util/logging
StringBufferLoggerImpl.java
Log:
1. Improve logging, while OJB bootstrap process all boot log messages are
written in a buffer. On the first #getLogger(...) call OJB checks for logging
environment:
- When logging environment is found initialize logger, get message string
from StringBufferLogger and log it as normal info message in logger.
- Logging environment is missing or fails on initialization, then use
PoorMansLogger as logger and log StringBufferLogger message string as error.
2. Update logging properties files
Revision Changes Path
1.7 +3 -3
db-ojb/src/java/org/apache/ojb/broker/util/logging/CommonsLoggerImpl.java
Index: CommonsLoggerImpl.java
===================================================================
RCS file:
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/util/logging/CommonsLoggerImpl.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- CommonsLoggerImpl.java 3 Sep 2005 18:07:59 -0000 1.6
+++ CommonsLoggerImpl.java 19 Nov 2005 13:33:55 -0000 1.7
@@ -49,8 +49,8 @@
public Log getLog()
{
/*
- arminw: Log is declared 'transient', thus we have to null-check
- this field
+ Log is declared 'transient', thus we have to null-check
+ this field because Logger interface extends Serializable
*/
if(log == null)
{
1.20 +348 -326
db-ojb/src/java/org/apache/ojb/broker/util/logging/Log4jLoggerImpl.java
Index: Log4jLoggerImpl.java
===================================================================
RCS file:
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/util/logging/Log4jLoggerImpl.java,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- Log4jLoggerImpl.java 3 Sep 2005 18:07:59 -0000 1.19
+++ Log4jLoggerImpl.java 19 Nov 2005 13:33:55 -0000 1.20
@@ -18,8 +18,8 @@
import java.net.URL;
import java.util.Enumeration;
-import org.apache.log4j.LogManager;
import org.apache.log4j.Level;
+import org.apache.log4j.LogManager;
import org.apache.log4j.PropertyConfigurator;
import org.apache.ojb.broker.util.ClassHelper;
@@ -42,64 +42,70 @@
*/
public class Log4jLoggerImpl implements Logger
{
- static private final String FQCN = Log4jLoggerImpl.class.getName();
+ static private final String FQCN = Log4jLoggerImpl.class.getName();
/** flag about log4j configuration state */
private static boolean log4jConfigured = false;
private transient org.apache.log4j.Logger logger;
- private String name;
+ private String name;
- /**
- * Helper method to check if log4j is already configured
- */
+ /** Helper method to check if log4j is already configured */
private static synchronized boolean isLog4JConfigured()
{
- if (log4jConfigured)
- return true;
-
- Enumeration en =
org.apache.log4j.Logger.getRootLogger().getAllAppenders();
-
- if (!(en instanceof org.apache.log4j.helpers.NullEnumeration))
+ if(!log4jConfigured)
{
- log4jConfigured = true;
- return true;
- }
- else
- {
- Enumeration cats = LogManager.getCurrentLoggers();
- while (cats.hasMoreElements())
+ Enumeration en =
org.apache.log4j.Logger.getRootLogger().getAllAppenders();
+
+ if(!(en instanceof org.apache.log4j.helpers.NullEnumeration))
+ {
+ log4jConfigured = true;
+ }
+ else
{
- org.apache.log4j.Logger c = (org.apache.log4j.Logger)
cats.nextElement();
- if (!(c.getAllAppenders() instanceof
org.apache.log4j.helpers.NullEnumeration))
+ Enumeration cats = LogManager.getCurrentLoggers();
+ while(cats.hasMoreElements())
{
- log4jConfigured = true;
- return true;
+ org.apache.log4j.Logger c = (org.apache.log4j.Logger)
cats.nextElement();
+ if(!(c.getAllAppenders() instanceof
org.apache.log4j.helpers.NullEnumeration))
+ {
+ log4jConfigured = true;
+ }
}
}
+ if(log4jConfigured)
+ {
+ String msg = "Log4J is already configured, will not search
for log4j properties file";
+ LoggerFactory.getBootLogger().info(msg);
+ }
+ else
+ {
+ LoggerFactory.getBootLogger().info("Log4J is not
configured");
+ }
}
- return false;
+ return log4jConfigured;
}
/**
* Initialization of log4j <br>
* <b>NOTE</b> - if log4j property file is called log4j.properties then
* log4j will be configured already.
- *
*/
private static synchronized void initializeLog4JSubSystem(String
configFile)
{
- LoggerFactory.getBootLogger().info("Initializing Log4J using file:"
+ configFile);
+ LoggerFactory.getBootLogger().info("Initializing Log4J using file:
'" + configFile + "'");
if(configFile == null || "".equals(configFile.trim()))
{
// no configuration available
+ LoggerFactory.getBootLogger().warn("No log4j configuration file
specified");
+ log4jConfigured = true;
}
else
{
// try resource look in classpath
URL url = ClassHelper.getResource(configFile);
- LoggerFactory.getBootLogger().info("Initializing Log4J :
resource from config file:" + url);
- if (url != null)
+ if(url != null)
{
+ LoggerFactory.getBootLogger().info("Initializing Log4J,
resource from config file: " + url);
PropertyConfigurator.configure(url);
}
// if file is not in classpath try ordinary filesystem lookup
@@ -107,310 +113,326 @@
{
PropertyConfigurator.configure(configFile);
}
+ log4jConfigured = true;
+ }
+ }
+
+ public Log4jLoggerImpl(String name, LoggingConfiguration conf)
+ {
+ this.name = name;
+ if(!isLog4JConfigured())
+ {
+ initializeLog4JSubSystem(conf.getLoggerConfigFile());
+ }
+ logger = org.apache.log4j.Logger.getLogger(name);
+ }
+
+ /**
+ * Gets the logger.
+ *
+ * @return Returns a Category
+ */
+ private org.apache.log4j.Logger getLogger()
+ {
+ /*
+ Log is declared 'transient', thus we have to null-check
+ this field because Logger interface extends Serializable
+ */
+ if(logger == null)
+ {
+ logger = org.apache.log4j.Logger.getLogger(name);
+ }
+ return logger;
+ }
+
+ public String getName()
+ {
+ return name;
+ }
+
+ private Level getLevel()
+ {
+ return getLogger().getEffectiveLevel();
+ }
+
+ /**
+ * generate a message for loglevel DEBUG
+ *
+ * @param pObject the message Object
+ */
+ public final void debug(Object pObject)
+ {
+ getLogger().log(FQCN, Level.DEBUG, pObject, null);
+ }
+
+ /**
+ * generate a message for loglevel INFO
+ *
+ * @param pObject the message Object
+ */
+ public final void info(Object pObject)
+ {
+ getLogger().log(FQCN, Level.INFO, pObject, null);
+ }
+
+ /**
+ * generate a message for loglevel WARN
+ *
+ * @param pObject the message Object
+ */
+ public final void warn(Object pObject)
+ {
+ getLogger().log(FQCN, Level.WARN, pObject, null);
+ }
+
+ /**
+ * generate a message for loglevel ERROR
+ *
+ * @param pObject the message Object
+ */
+ public final void error(Object pObject)
+ {
+ getLogger().log(FQCN, Level.ERROR, pObject, null);
+ }
+
+ /**
+ * generate a message for loglevel FATAL
+ *
+ * @param pObject the message Object
+ */
+ public final void fatal(Object pObject)
+ {
+ getLogger().log(FQCN, Level.FATAL, pObject, null);
+ }
+
+ public void debug(Object message, Throwable obj)
+ {
+ getLogger().log(FQCN, Level.DEBUG, message, obj);
+ }
+
+ public void error(Object message, Throwable obj)
+ {
+ getLogger().log(FQCN, Level.ERROR, message, obj);
+ }
+
+ public void fatal(Object message, Throwable obj)
+ {
+ getLogger().log(FQCN, Level.FATAL, message, obj);
+ }
+
+ public void info(Object message, Throwable obj)
+ {
+ getLogger().log(FQCN, Level.INFO, message, obj);
+ }
+
+ public void warn(Object message, Throwable obj)
+ {
+ getLogger().log(FQCN, Level.WARN, message, obj);
+ }
+
+ public void safeDebug(String message, Object obj)
+ {
+ if(Level.DEBUG.isGreaterOrEqual(getLevel()))
+ {
+ String toString = null;
+ if(obj != null)
+ {
+ try
+ {
+ toString = obj.toString();
+ }
+ catch(Throwable t)
+ {
+ toString = "BAD toString() impl for " +
obj.getClass().getName();
+ }
+ }
+ debug(message + " : " + toString);
+ }
+ }
+
+ public void safeDebug(String message, Object obj, Throwable throwable)
+ {
+ if(Level.DEBUG.isGreaterOrEqual(getLevel()))
+ {
+ String toString = null;
+ if(obj != null)
+ {
+ try
+ {
+ toString = obj.toString();
+ }
+ catch(Throwable t)
+ {
+ toString = "BAD toString() impl for " +
obj.getClass().getName();
+ }
+ }
+ debug(message + " : " + toString, throwable);
+ }
+ }
+
+ public void safeInfo(String message, Object obj)
+ {
+ if(Level.INFO.isGreaterOrEqual(getLevel()))
+ {
+ String toString = null;
+ if(obj != null)
+ {
+ try
+ {
+ toString = obj.toString();
+ }
+ catch(Throwable t)
+ {
+ toString = "BAD toString() impl for " +
obj.getClass().getName();
+ }
+ }
+ info(message + " : " + toString);
+ }
+ }
+
+ public void safeInfo(String message, Object obj, Throwable throwable)
+ {
+ if(Level.INFO.isGreaterOrEqual(getLevel()))
+ {
+ String toString = null;
+ if(obj != null)
+ {
+ try
+ {
+ toString = obj.toString();
+ }
+ catch(Throwable t)
+ {
+ toString = "BAD toString() impl for " +
obj.getClass().getName();
+ }
+ }
+ info(message + " : " + toString, throwable);
+ }
+ }
+
+ public void safeWarn(String message, Object obj)
+ {
+ if(Level.WARN.isGreaterOrEqual(getLevel()))
+ {
+ String toString;
+ try
+ {
+ toString = obj.toString();
+ }
+ catch(Throwable t)
+ {
+ toString = "BAD toString() impl for " +
obj.getClass().getName();
+ }
+ warn(message + " : " + toString);
+ }
+ }
+
+ public void safeWarn(String message, Object obj, Throwable throwable)
+ {
+ if(Level.WARN.isGreaterOrEqual(getLevel()))
+ {
+ String toString;
+ try
+ {
+ toString = obj.toString();
+ }
+ catch(Throwable t)
+ {
+ toString = "BAD toString() impl for " +
obj.getClass().getName();
+ }
+ warn(message + " : " + toString, throwable);
+ }
+ }
+
+ public void safeError(String message, Object obj)
+ {
+ if(Level.ERROR.isGreaterOrEqual(getLevel()))
+ {
+ String toString;
+ try
+ {
+ toString = obj.toString();
+ }
+ catch(Throwable t)
+ {
+ toString = "BAD toString() impl for " +
obj.getClass().getName();
}
+ error(message + " : " + toString);
}
+ }
- public Log4jLoggerImpl(String name, LoggingConfiguration conf)
- {
- this.name = name;
- logger = org.apache.log4j.Logger.getLogger(name);
- }
-
- /**
- * Gets the logger.
- * @return Returns a Category
- */
- private org.apache.log4j.Logger getLogger()
- {
- if (logger == null)
- {
- if (!isLog4JConfigured())
- {
- initializeLog4JSubSystem(getName());
- }
- logger = org.apache.log4j.Logger.getLogger(name);
- }
- return logger;
- }
-
- public String getName()
- {
- return name;
- }
-
- private Level getLevel()
- {
- return getLogger().getEffectiveLevel();
- }
-
- /**
- * generate a message for loglevel DEBUG
- * @param pObject the message Object
- */
- public final void debug(Object pObject)
- {
- getLogger().log(FQCN, Level.DEBUG, pObject, null);
- }
-
- /**
- * generate a message for loglevel INFO
- * @param pObject the message Object
- */
- public final void info(Object pObject)
- {
- getLogger().log(FQCN, Level.INFO, pObject, null);
- }
-
- /**
- * generate a message for loglevel WARN
- * @param pObject the message Object
- */
- public final void warn(Object pObject)
- {
- getLogger().log(FQCN, Level.WARN, pObject, null);
- }
-
- /**
- * generate a message for loglevel ERROR
- * @param pObject the message Object
- */
- public final void error(Object pObject)
- {
- getLogger().log(FQCN, Level.ERROR, pObject, null);
- }
-
- /**
- * generate a message for loglevel FATAL
- * @param pObject the message Object
- */
- public final void fatal(Object pObject)
- {
- getLogger().log(FQCN, Level.FATAL, pObject, null);
- }
-
- public void debug(Object message, Throwable obj)
- {
- getLogger().log(FQCN, Level.DEBUG, message, obj);
- }
-
- public void error(Object message, Throwable obj)
- {
- getLogger().log(FQCN, Level.ERROR, message, obj);
- }
-
- public void fatal(Object message, Throwable obj)
- {
- getLogger().log(FQCN, Level.FATAL, message, obj);
- }
-
- public void info(Object message, Throwable obj)
- {
- getLogger().log(FQCN, Level.INFO, message, obj);
- }
-
- public void warn(Object message, Throwable obj)
- {
- getLogger().log(FQCN, Level.WARN, message, obj);
- }
-
- public void safeDebug(String message, Object obj)
- {
- if (Level.DEBUG.isGreaterOrEqual(getLevel()))
- {
- String toString = null;
- if (obj != null)
- {
- try
- {
- toString = obj.toString();
- }
- catch (Throwable t)
- {
- toString = "BAD toString() impl for " +
obj.getClass().getName();
- }
- }
- debug(message + " : " + toString);
- }
- }
-
- public void safeDebug(String message, Object obj, Throwable throwable)
- {
- if (Level.DEBUG.isGreaterOrEqual(getLevel()))
- {
- String toString = null;
- if (obj != null)
- {
- try
- {
- toString = obj.toString();
- }
- catch (Throwable t)
- {
- toString = "BAD toString() impl for " +
obj.getClass().getName();
- }
- }
- debug(message + " : " + toString, throwable);
- }
- }
-
- public void safeInfo(String message, Object obj)
- {
- if (Level.INFO.isGreaterOrEqual(getLevel()))
- {
- String toString = null;
- if (obj != null)
- {
- try
- {
- toString = obj.toString();
- }
- catch (Throwable t)
- {
- toString = "BAD toString() impl for " +
obj.getClass().getName();
- }
- }
- info(message + " : " + toString);
- }
- }
-
- public void safeInfo(String message, Object obj, Throwable throwable)
- {
- if (Level.INFO.isGreaterOrEqual(getLevel()))
- {
- String toString = null;
- if (obj != null)
- {
- try
- {
- toString = obj.toString();
- }
- catch (Throwable t)
- {
- toString = "BAD toString() impl for " +
obj.getClass().getName();
- }
- }
- info(message + " : " + toString, throwable);
- }
- }
-
- public void safeWarn(String message, Object obj)
- {
- if (Level.WARN.isGreaterOrEqual(getLevel()))
- {
- String toString;
- try
- {
- toString = obj.toString();
- }
- catch (Throwable t)
- {
- toString = "BAD toString() impl for " +
obj.getClass().getName();
- }
- warn(message + " : " + toString);
- }
- }
-
- public void safeWarn(String message, Object obj, Throwable throwable)
- {
- if (Level.WARN.isGreaterOrEqual(getLevel()))
- {
- String toString;
- try
- {
- toString = obj.toString();
- }
- catch (Throwable t)
- {
- toString = "BAD toString() impl for " +
obj.getClass().getName();
- }
- warn(message + " : " + toString, throwable);
- }
- }
-
- public void safeError(String message, Object obj)
- {
- if (Level.ERROR.isGreaterOrEqual(getLevel()))
- {
- String toString;
- try
- {
- toString = obj.toString();
- }
- catch (Throwable t)
- {
- toString = "BAD toString() impl for " +
obj.getClass().getName();
- }
- error(message + " : " + toString);
- }
- }
-
- public void safeError(String message, Object obj, Throwable throwable)
- {
- if (Level.ERROR.isGreaterOrEqual(getLevel()))
- {
- String toString;
- try
- {
- toString = obj.toString();
- }
- catch (Throwable t)
- {
- toString = "BAD toString() impl for " +
obj.getClass().getName();
- }
- error(message + " : " + toString, throwable);
- }
- }
-
- public void safeFatal(String message, Object obj)
- {
- if (Level.FATAL.isGreaterOrEqual(getLevel()))
- {
- String toString;
- try
- {
- toString = obj.toString();
- }
- catch (Throwable t)
- {
- toString = "BAD toString() impl for " +
obj.getClass().getName();
- }
- fatal(message + " : " + toString);
- }
- }
-
- public void safeFatal(String message, Object obj, Throwable throwable)
- {
- if (Level.FATAL.isGreaterOrEqual(getLevel()))
- {
- String toString;
- try
- {
- toString = obj.toString();
- }
- catch (Throwable t)
- {
- toString = "BAD toString() impl for " +
obj.getClass().getName();
- }
- fatal(message + " : " + toString, throwable);
- }
- }
-
- public boolean isDebugEnabled()
- {
- return getLogger().isDebugEnabled();
- }
+ public void safeError(String message, Object obj, Throwable throwable)
+ {
+ if(Level.ERROR.isGreaterOrEqual(getLevel()))
+ {
+ String toString;
+ try
+ {
+ toString = obj.toString();
+ }
+ catch(Throwable t)
+ {
+ toString = "BAD toString() impl for " +
obj.getClass().getName();
+ }
+ error(message + " : " + toString, throwable);
+ }
+ }
- public boolean isEnabledFor(int priority)
- {
+ public void safeFatal(String message, Object obj)
+ {
+ if(Level.FATAL.isGreaterOrEqual(getLevel()))
+ {
+ String toString;
+ try
+ {
+ toString = obj.toString();
+ }
+ catch(Throwable t)
+ {
+ toString = "BAD toString() impl for " +
obj.getClass().getName();
+ }
+ fatal(message + " : " + toString);
+ }
+ }
+
+ public void safeFatal(String message, Object obj, Throwable throwable)
+ {
+ if(Level.FATAL.isGreaterOrEqual(getLevel()))
+ {
+ String toString;
+ try
+ {
+ toString = obj.toString();
+ }
+ catch(Throwable t)
+ {
+ toString = "BAD toString() impl for " +
obj.getClass().getName();
+ }
+ fatal(message + " : " + toString, throwable);
+ }
+ }
+
+ public boolean isDebugEnabled()
+ {
+ return getLogger().isDebugEnabled();
+ }
+
+ public boolean isEnabledFor(int priority)
+ {
org.apache.log4j.Logger log4j = getLogger();
switch(priority)
{
- case Logger.DEBUG: return log4j.isDebugEnabled();
- case Logger.INFO: return log4j.isInfoEnabled();
- case Logger.WARN: return
log4j.isEnabledFor(org.apache.log4j.Priority.WARN);
- case Logger.ERROR: return
log4j.isEnabledFor(org.apache.log4j.Priority.ERROR);
- case Logger.FATAL: return
log4j.isEnabledFor(org.apache.log4j.Priority.FATAL);
- }
+ case Logger.DEBUG:
+ return log4j.isDebugEnabled();
+ case Logger.INFO:
+ return log4j.isInfoEnabled();
+ case Logger.WARN:
+ return log4j.isEnabledFor(org.apache.log4j.Priority.WARN);
+ case Logger.ERROR:
+ return log4j.isEnabledFor(org.apache.log4j.Priority.ERROR);
+ case Logger.FATAL:
+ return log4j.isEnabledFor(org.apache.log4j.Priority.FATAL);
+ }
return false;
}
}
1.24 +104 -26
db-ojb/src/java/org/apache/ojb/broker/util/logging/LoggerFactoryImpl.java
Index: LoggerFactoryImpl.java
===================================================================
RCS file:
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/util/logging/LoggerFactoryImpl.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- LoggerFactoryImpl.java 9 Nov 2005 01:17:00 -0000 1.23
+++ LoggerFactoryImpl.java 19 Nov 2005 13:33:55 -0000 1.24
@@ -18,6 +18,7 @@
import java.util.HashMap;
import java.util.Map;
+import org.apache.commons.lang.SystemUtils;
import org.apache.ojb.broker.util.ClassHelper;
/**
@@ -34,23 +35,28 @@
*/
public class LoggerFactoryImpl
{
+ public static final String BOOT_LOG_LEVERL_STR = "OJB.bootLogLevel";
+ public static final String BOOT_STR = "BOOT";
+ public static final String DEFAULT_STR = "BOOT";
public static final LoggerFactoryImpl INSTANCE = new LoggerFactoryImpl();
private Logger defaultLogger = null;
private Logger bootLogger = null;
+ private boolean bootLoggerIsReassigned = false;
+
/** Used for caching logger instances */
private Map cache = new HashMap();
/** The configuration */
private LoggingConfiguration conf;
-
+
// yes. it's a singleton !
private LoggerFactoryImpl()
{
}
-
+
public static LoggerFactoryImpl getInstance()
{
return INSTANCE;
@@ -58,7 +64,7 @@
private LoggingConfiguration getConfiguration()
{
- if (conf == null)
+ if(conf == null)
{
// this will load the configuration
conf = new LoggingConfiguration();
@@ -75,12 +81,10 @@
*/
public Logger getBootLogger()
{
- if (bootLogger == null)
+ if(bootLogger == null)
{
- bootLogger = new PoorMansLoggerImpl("BOOT", null);
- // allow user to set boot log level via system property
- String level = System.getProperty("OJB.bootLogLevel",
LoggingConfiguration.OJB_DEFAULT_BOOT_LOG_LEVEL);
- ((PoorMansLoggerImpl) bootLogger).setLevel(level);
+ // create a StringBuffer based Logger for boot log operations
+ bootLogger = createStringBufferLogger_Boot();
}
return bootLogger;
}
@@ -95,9 +99,9 @@
*/
public Logger getDefaultLogger()
{
- if (defaultLogger == null)
+ if(defaultLogger == null)
{
- defaultLogger = getLogger("DEFAULT");
+ defaultLogger = getLogger(DEFAULT_STR);
}
return defaultLogger;
}
@@ -130,28 +134,102 @@
if(logger == null)
{
- Class loggerClass = null;
try
{
// get the configuration (not from the configurator because
this is independent)
- LoggingConfiguration conf = getConfiguration();
-
- loggerClass = conf.getLoggerClass();
- getBootLogger().debug("Using logger class " + loggerClass +
" for " + loggerName);
- logger = (Logger) ClassHelper.newInstance(loggerClass,
- new Class[] {
String.class, LoggingConfiguration.class },
- new Object[] {
loggerName, conf });
-
- //cache it so we can get it faster the next time
- cache.put(loggerName, logger);
+ logger = createLoggerInstance(loggerName);
+ if(getBootLogger().isDebugEnabled())
+ {
+ getBootLogger().debug("Using logger class '"
+ + (getConfiguration() != null ?
getConfiguration().getLoggerClass() : null)
+ + "' for " + loggerName);
+ }
+ // configure the logger
+ getBootLogger().debug("Initializing logger instance " +
loggerName);
}
- catch (Throwable t)
+ catch(Throwable t)
{
+ // do reassign check and signal logger creation failure
+ reassignBootLogger(true);
logger = getBootLogger();
- logger.error("[" + this.getClass().getName()
- + "] Could not set logger for class " + (loggerClass
!= null ? loggerClass.getName() : "'null'"), t);
+ getBootLogger().error("[" + this.getClass().getName()
+ + "] Could not initialize logger " + (conf != null ?
conf.getLoggerClass() : null), t);
}
+ //cache it so we can get it faster the next time
+ cache.put(loggerName, logger);
+ // do reassign check
+ reassignBootLogger(false);
}
return logger;
}
-}
+
+ /** Creates a new Logger instance for the specified name. */
+ private Logger createLoggerInstance(String loggerName) throws Exception
+ {
+ Class loggerClass = getConfiguration().getLoggerClass();
+ return (Logger) ClassHelper.newInstance(loggerClass,
+ new Class[]{String.class, LoggingConfiguration.class},
+ new Object[]{loggerName, conf});
+ }
+
+ /** @param forceError */
+ protected synchronized void reassignBootLogger(boolean forceError)
+ {
+ // if the boot logger was already reassigned do nothing
+ if(!bootLoggerIsReassigned)
+ {
+ Logger newBootLogger = null;
+ String name = getBootLogger().getName();
+ try
+ {
+ // 1. try to use a Logger instance based on the
configuration files
+ newBootLogger = createLoggerInstance(name);
+ }
+ catch(Exception e)
+ {/*ignore*/}
+ if(newBootLogger == null)
+ {
+ // 2. if no logging library can be found, use OJB's console
logger
+ newBootLogger =
createPoorMansLogger_Boot(getConfiguration());
+ }
+ if(getBootLogger() instanceof StringBufferLoggerImpl)
+ {
+ /*
+ if the StringBuffer based Logger was used for OJB bootstrap
process
+ get the logging statement string and log it on the "real"
Logger instance
+ */
+ StringBufferLoggerImpl strLogger = (StringBufferLoggerImpl)
getBootLogger();
+ String bootMessage = strLogger.flushLogBuffer();
+ String eol = SystemUtils.LINE_SEPARATOR;
+ if(forceError || strLogger.isErrorLog())
+ {
+ newBootLogger.error("-- boot log messages -->" + eol +
bootMessage);
+ }
+ else
+ {
+ newBootLogger.info("-- boot log messages -->" + eol +
bootMessage);
+ }
+ }
+ bootLogger = newBootLogger;
+ bootLoggerIsReassigned = true;
+ }
+ }
+
+ protected Logger createPoorMansLogger_Boot(LoggingConfiguration conf)
+ {
+ Logger bootLogger = new PoorMansLoggerImpl(BOOT_STR, conf);
+ // allow user to set boot log level via system property
+ String level = System.getProperty(BOOT_LOG_LEVERL_STR,
LoggingConfiguration.OJB_DEFAULT_BOOT_LOG_LEVEL);
+ ((PoorMansLoggerImpl) bootLogger).setLevel(level);
+ return bootLogger;
+ }
+
+ protected Logger createStringBufferLogger_Boot()
+ {
+ Logger bootLogger = new StringBufferLoggerImpl(BOOT_STR, null);
+ // allow user to set boot log level via system property
+ String level = System.getProperty(BOOT_LOG_LEVERL_STR,
LoggingConfiguration.OJB_DEFAULT_BOOT_LOG_LEVEL);
+ ((PoorMansLoggerImpl) bootLogger).setLevel(level);
+ return bootLogger;
+ }
+}
\ No newline at end of file
1.14 +14 -14
db-ojb/src/java/org/apache/ojb/broker/util/logging/PoorMansLoggerImpl.java
Index: PoorMansLoggerImpl.java
===================================================================
RCS file:
/home/cvs/db-ojb/src/java/org/apache/ojb/broker/util/logging/PoorMansLoggerImpl.java,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -r1.13 -r1.14
--- PoorMansLoggerImpl.java 3 Sep 2005 18:07:59 -0000 1.13
+++ PoorMansLoggerImpl.java 19 Nov 2005 13:33:55 -0000 1.14
@@ -24,20 +24,20 @@
*/
public class PoorMansLoggerImpl implements Logger
{
- private static final String STR_DEBUG = "DEBUG";
- private static final String STR_INFO = "INFO";
- private static final String STR_WARN = "WARN";
- private static final String STR_ERROR = "ERROR";
- private static final String STR_FATAL = "FATAL";
-
- private static final String STR_DEBUG_MSG = "DEBUG: ";
- private static final String STR_INFO_MSG = "INFO: ";
- private static final String STR_WARN_MSG = "WARN: ";
- private static final String STR_ERROR_MSG = "ERROR: ";
- private static final String STR_FATAL_MSG = "FATAL: ";
+ protected static final String STR_DEBUG = "DEBUG";
+ protected static final String STR_INFO = "INFO";
+ protected static final String STR_WARN = "WARN";
+ protected static final String STR_ERROR = "ERROR";
+ protected static final String STR_FATAL = "FATAL";
+
+ protected static final String STR_DEBUG_MSG = "DEBUG: ";
+ protected static final String STR_INFO_MSG = "INFO: ";
+ protected static final String STR_WARN_MSG = "WARN: ";
+ protected static final String STR_ERROR_MSG = "ERROR: ";
+ protected static final String STR_FATAL_MSG = "FATAL: ";
- private static final String BRAKE_OPEN = "[";
- private static final String BRAKE_CLOSE = "] ";
+ protected static final String BRAKE_OPEN = "[";
+ protected static final String BRAKE_CLOSE = "] ";
private String name;
1.2 +106 -0
db-ojb/src/java/org/apache/ojb/broker/util/logging/StringBufferLoggerImpl.java
1.3 +16 -2 db-ojb/src/test/org/apache/ojb/commons-logging.properties
Index: commons-logging.properties
===================================================================
RCS file:
/home/cvs/db-ojb/src/test/org/apache/ojb/commons-logging.properties,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- commons-logging.properties 5 Apr 2004 13:58:59 -0000 1.2
+++ commons-logging.properties 19 Nov 2005 13:33:55 -0000 1.3
@@ -16,8 +16,22 @@
#-->
#
# commons-logging config
+# -----------------------
+# here can be specified which LogFactory and Log implementation
+# should be used by commons-logging. If none specified or this
+# file isn't in classpath, commons-logging use the default
+# discovery process to determine what type of Log implementation it
+# should use (see commons-logging documentation).
#
-
-org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
+#org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog
+#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Jdk14Logger
+#org.apache.commons.logging.Log=org.apache.commons.logging.impl.AvalonLogger
+#org.apache.commons.logging.Log=org.apache.commons.logging.impl.LogKitLogger
+#org.apache.commons.logging.Log=org.apache.commons.logging.impl.NoOpLog
+# commons-logging version <1.1
+#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
+# commons-logging version >=1.1
+#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4J13Logger
+#org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4J12Logger
1.7 +83 -8 db-ojb/src/test/org/apache/ojb/log4j.properties
Index: log4j.properties
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/log4j.properties,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- log4j.properties 5 Apr 2004 13:58:59 -0000 1.6
+++ log4j.properties 19 Nov 2005 13:33:55 -0000 1.7
@@ -16,22 +16,97 @@
#-->
# An example log4j configuration file that outputs both to System.out
# and a file named 'org.apache.ojb.log'.
-
+#
# For the general syntax of property based configuration files see the
# documenation of org.apache.log4j.PropertyConfigurator.
-
+#
# WARNING: Location information can be useful but is very costly in
# terms of computation.
-
+#
# The root category uses the appenders called A1 and A2. Since no
# priority is set, the root category assumes the default which is
# DEBUG
-
+#
log4j.rootCategory=WARN, A1, A2
-#log4j.logger.org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl=DEBUG
-#log4j.logger.org.apache.ojb.broker.metadata.RepositoryXmlHandler=DEBUG
-#log4j.logger.org.apache.ojb.broker.accesslayer.ConnectionManager=INFO
-#log4j.logger.org.apache.ojb.odmg=INFO
+#
+# The boot log level used to initialize logging
+log4j.logger.BOOT=INFO
+#
+# The Default Logger instance used within OJB
+log4j.logger.DEFAULT=WARN
+#
+# PB-api and Kernel
+# -----------------
+# Logger for PB-api base classes
+log4j.logger.org.apache.ojb.broker.core.PersistenceBrokerFactoryDefaultImpl=WARN
+log4j.logger.org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl=WARN
+log4j.logger.org.apache.ojb.broker.core.PersistenceBrokerImpl=WARN
+#
+# Logger for metadata classes, useful for debugging parsing of
repository.xml!
+# persistence capable object metadata
+log4j.logger.org.apache.ojb.broker.metadata.DescriptorRepository=WARN
+log4j.logger.org.apache.ojb.broker.metadata.RepositoryXmlHandler=WARN
+log4j.logger.org.apache.ojb.broker.metadata.ConnectionDescriptorXmlHandler=WARN
+log4j.logger.org.apache.ojb.broker.metadata.RepositoryPersistor=WARN
+log4j.logger.org.apache.ojb.broker.metadata.SuperReferenceDescriptor$SuperReferenceField=WARN
+#
+# Logger for jdbc access querying and object materialization, useful
+# for debugging JDBC related problems
+log4j.logger.org.apache.ojb.broker.accesslayer.JdbcAccessImpl=WARN
+log4j.logger.org.apache.ojb.broker.accesslayer.RsIterator=WARN
+log4j.logger.org.apache.ojb.broker.accesslayer.StatementsForClassImpl=WARN
+log4j.logger.org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl=WARN
+#
+# Jdbc Batch Handling
+log4j.logger.org.apache.ojb.broker.accesslayer.batch.BatchManagerImpl=WARN
+log4j.logger.org.apache.ojb.broker.accesslayer.batch.BatchStrategyDefaultImpl=WARN
+#
+# Logger for connection handling
+log4j.logger.org.apache.ojb.broker.accesslayer.ConnectionManagerImpl=WARN
+log4j.logger.org.apache.ojb.broker.accesslayer.ConnectionFactoryAbstractImpl=WARN
+log4j.logger.org.apache.ojb.broker.accesslayer.ConnectionFactoryPooledImpl=WARN
+log4j.logger.org.apache.ojb.broker.accesslayer.ConnectionFactoryDBCPImpl=WARN
+#
+# Logger for object caching
+log4j.logger.org.apache.ojb.broker.cache.CacheDistributor=WARN
+log4j.logger.org.apache.ojb.broker.cache.MaterializationCache=WARN
+log4j.logger.org.apache.ojb.broker.cache.ObjectCacheDefaultImpl=WARN
+log4j.logger.org.apache.ojb.broker.cache.ObjectCacheJCSImpl=WARN
+log4j.logger.org.apache.ojb.broker.cache.ObjectCacheOSCacheImpl=WARN
+#
+# Logger for Oracle9i platform, useful for tracing failing Oracle-extensions
or large LOB-support
+log4j.logger.org.apache.ojb.broker.platforms.PlatformOracle9iImpl=WARN
+#
+# Logger for proxy classes
+log4j.logger.org.apache.ojb.broker.core.proxy.IndirectionHandlerJDKImpl=WARN
+log4j.logger.org.apache.ojb.broker.core.proxy.IndirectionHandlerCGLIBImpl=WARN
+log4j.logger.org.apache.ojb.broker.core.proxy.ProxyFactoryJDKImpl=WARN
+log4j.logger.org.apache.ojb.broker.core.proxy.ProxyFactoryCGLIBImpl=WARN
+#
+# OJB locking implementations
+log4j.logger.org.apache.ojb.broker.locking.LockManagerInMemoryImpl=WARN
+log4j.logger.org.apache.ojb.broker.locking.LockManagerCommonsImpl=WARN
+log4j.logger.org.apache.ojb.broker.locking.LockManagerRemoteImpl=WARN
+log4j.logger.org.apache.ojb.broker.locking.CommonsOJBLockManager=WARN
+#
+# odmg-api
+# --------
+log4j.logger.org.apache.ojb.odmg.TransactionImpl=WARN
+log4j.logger.org.apache.ojb.odmg.J2EETransactionImpl=WARN
+log4j.logger.org.apache.ojb.odmg.ImplementationImpl=WARN
+log4j.logger.org.apache.ojb.odmg.DatabaseImpl=WARN
+log4j.logger.org.apache.ojb.odmg.ObjectEnvelopeTable=WARN
+log4j.logger.org.apache.ojb.odmg.ObjectEnvelope=WARN
+log4j.logger.org.apache.ojb.odmg.ObjectEnvelopeOrdering=WARN
+log4j.logger.org.apache.ojb.odmg.LocalTxManager=WARN
+log4j.logger.org.apache.ojb.odmg.JTATxManager=WARN
+#
+# Special Logger categories used in test suite
+#
+# Logger for the performance tests
+log4j.logger.performance=INFO
+# Logger for the failover tests
+log4j.logger.failover=INFO
# A1 is set to be ConsoleAppender sending its output to System.out
1.8 +53 -47 db-ojb/src/test/org/apache/ojb/OJB-logging.properties
Index: OJB-logging.properties
===================================================================
RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/OJB-logging.properties,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- OJB-logging.properties 1 Oct 2005 13:50:34 -0000 1.7
+++ OJB-logging.properties 19 Nov 2005 13:33:55 -0000 1.8
@@ -14,10 +14,8 @@
# * limitations under the License.
# */
#-->
+#
# OJB-logging.properties -- configuration of the logging within the OJB
runtime environment
-# Version: 1.0
-# (c) 2001, 2002, 2003 Apache Software Foundation
-# Author: Thomas Mahler and many others
# @version $Id$
#----------------------------------------------------------------------------------------
# The LoggerClass entry tells OJB which concrete Logger implementation is to
be used.
@@ -28,12 +26,19 @@
#
# Commons-logging
#LoggerClass=org.apache.ojb.broker.util.logging.CommonsLoggerImpl
+#
# log4j based logging
#LoggerClass=org.apache.ojb.broker.util.logging.Log4jLoggerImpl
+# specifiy the name of log4j properties file (only needed if file
+# name is different from "log4j.properties")
+#LoggerConfigFile=log4j.properties
+#
# OJB's own simple looging support
LoggerClass=org.apache.ojb.broker.util.logging.PoorMansLoggerImpl
-LoggerConfigFile=log4j.properties
#
+#----------------------------------------------------------------
+# all following properties are specific to PoorMansLoggerImpl
+#----------------------------------------------------------------
# The LogLevel entries tells OJB which LogLevels are active
# for the different loggers used within OJB
# Loglevels: DEBUG < INFO < WARN < ERROR < FATAL
@@ -42,55 +47,62 @@
#
# Global default log level used for all logging
# entities if not specified
-ROOT.LogLevel=WARN
+ROOT.LogLevel=ERROR
+#
+# The boot log level used to initialize logging
+BOOT.LogLevel=INFO
#
# The Default Logger instance used within OJB
DEFAULT.LogLevel=WARN
#
# PB-api and Kernel
-#
-# Logger for PersistenceBrokerImpl class
-org.apache.ojb.broker.core.PersistenceBrokerImpl.LogLevel=WARN
-# Logger for PersistenceBrokerFactory class
PersistenceBrokerFactoryDefaultImpl
+# -----------------
+# Logger for PB-api base classes
org.apache.ojb.broker.core.PersistenceBrokerFactoryDefaultImpl.LogLevel=WARN
-# Logger for metadata root class
-org.apache.ojb.broker.metadata.DescriptorRepository.LogLevel=WARN
-# Logger for RepositoryXmlHandler, useful for debugging parsing of
repository.xml!
+org.apache.ojb.broker.core.PersistenceBrokerFactorySyncImpl.LogLevel=WARN
+org.apache.ojb.broker.core.PersistenceBrokerImpl.LogLevel=WARN
+#
+# Logger for metadata classes, useful for debugging parsing of
repository.xml!
# persistence capable object metadata
+org.apache.ojb.broker.metadata.DescriptorRepository.LogLevel=WARN
org.apache.ojb.broker.metadata.RepositoryXmlHandler.LogLevel=WARN
-# Logger for ConnectionDescriptorXmlHandler, useful for debugging parsing of
repository.xml!
-# connection specific metadata
org.apache.ojb.broker.metadata.ConnectionDescriptorXmlHandler.LogLevel=WARN
-# Logger for JdbcAccess, useful for debugging JDBC related problems
+org.apache.ojb.broker.metadata.RepositoryPersistor.LogLevel=WARN
+org.apache.ojb.broker.metadata.SuperReferenceDescriptor$SuperReferenceField.LogLevel=WARN
+#
+# Logger for jdbc access querying and object materialization, useful
+# for debugging JDBC related problems
org.apache.ojb.broker.accesslayer.JdbcAccessImpl.LogLevel=WARN
-# BatchManager implementation class
-org.apache.ojb.broker.accesslayer.batch.BatchManagerImpl.LogLevel=WARN
-# BatchStrategy implementation
-org.apache.ojb.broker.accesslayer.batch.BatchStrategyDefaultImpl.LogLevel=WARN
-# Logger for RsIterator, useful for debugging problems with Object
materialization
org.apache.ojb.broker.accesslayer.RsIterator.LogLevel=WARN
-# Logger for SqlGenerator, useful for debugging generation of SQL
+org.apache.ojb.broker.accesslayer.StatementsForClassImpl.LogLevel=WARN
org.apache.ojb.broker.accesslayer.sql.SqlGeneratorDefaultImpl.LogLevel=WARN
-# Logger for RepositoryPersistor
-org.apache.ojb.broker.metadata.RepositoryPersistor.LogLevel=WARN
-# Logger for ConnectionFactory base class
-org.apache.ojb.broker.accesslayer.ConnectionFactoryAbstractImpl.LogLevel=WARN
-# Logger for ConnectionManager
+#
+# Jdbc Batch Handling
+org.apache.ojb.broker.accesslayer.batch.BatchManagerImpl.LogLevel=WARN
+org.apache.ojb.broker.accesslayer.batch.BatchStrategyDefaultImpl.LogLevel=WARN
+#
+# Logger for connection handling
org.apache.ojb.broker.accesslayer.ConnectionManagerImpl.LogLevel=WARN
-# Logger for IndirectionHandler class
-org.apache.ojb.broker.core.proxy.IndirectionHandler.LogLevel=WARN
-# Logger for Sessionache
-org.apache.ojb.broker.cache.SessionCacheImpl.LogLevel=WARN
-# Logger for CachingManager class
-org.apache.ojb.broker.cache.CachingManager.LogLevel=WARN
-# Logger for ObjectCache implemenations:
+org.apache.ojb.broker.accesslayer.ConnectionFactoryAbstractImpl.LogLevel=WARN
+org.apache.ojb.broker.accesslayer.ConnectionFactoryPooledImpl.LogLevel=WARN
+org.apache.ojb.broker.accesslayer.ConnectionFactoryDBCPImpl.LogLevel=WARN
+#
+# Logger for object caching
+org.apache.ojb.broker.cache.CacheDistributor.LogLevel=WARN
+org.apache.ojb.broker.cache.MaterializationCache.LogLevel=WARN
+org.apache.ojb.broker.cache.ObjectCacheDefaultImpl.LogLevel=WARN
org.apache.ojb.broker.cache.ObjectCacheJCSImpl.LogLevel=WARN
org.apache.ojb.broker.cache.ObjectCacheOSCacheImpl.LogLevel=WARN
-org.apache.ojb.broker.cache.ObjectCacheDefaultImpl.LogLevel=WARN
+#
# Logger for Oracle9i platform, useful for tracing failing Oracle-extensions
or large LOB-support
org.apache.ojb.broker.platforms.PlatformOracle9iImpl.LogLevel=WARN
-# Metadata for super-inheritance
-org.apache.ojb.broker.metadata.SuperReferenceDescriptor$SuperReferenceField.LogLevel=WARN
+#
+# Logger for proxy classes
+org.apache.ojb.broker.core.proxy.IndirectionHandlerJDKImpl.LogLevel=WARN
+org.apache.ojb.broker.core.proxy.IndirectionHandlerCGLIBImpl.LogLevel=WARN
+org.apache.ojb.broker.core.proxy.ProxyFactoryJDKImpl.LogLevel=WARN
+org.apache.ojb.broker.core.proxy.ProxyFactoryCGLIBImpl.LogLevel=WARN
+#
# OJB locking implementations
org.apache.ojb.broker.locking.LockManagerInMemoryImpl.LogLevel=WARN
org.apache.ojb.broker.locking.LockManagerCommonsImpl.LogLevel=WARN
@@ -98,7 +110,7 @@
org.apache.ojb.broker.locking.CommonsOJBLockManager.LogLevel=WARN
#
# odmg-api
-#
+# --------
org.apache.ojb.odmg.TransactionImpl.LogLevel=WARN
org.apache.ojb.odmg.J2EETransactionImpl.LogLevel=WARN
org.apache.ojb.odmg.ImplementationImpl.LogLevel=WARN
@@ -110,18 +122,12 @@
org.apache.ojb.odmg.JTATxManager.LogLevel=WARN
#
#
-# Special Logger categories used in test suite and tutorials
+# Special Logger categories used in test suite
#
-# Logger for the ODMG Implementation
-ODMG.LogLevel=DEBUG
-# Logger for the JDO RI Implementation
-JDO.LogLevel=DEBUG
# Logger for the performance tests
performance.LogLevel=INFO
-# Logger for the soda api
-soda.LogLevel=WARN
-# Logger for the factory service
-ConfigurableFactory.LogLevel=WARN
+# Logger for the failover tests
+failover.LogLevel=INFO
#
#
#----------------------------------------------------------------------------------------
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]