Update of /cvsroot/metamorphosis/ruper2/src/java/core/org/krysalis/ruper/log
In directory sc8-pr-cvs1:/tmp/cvs-serv32371/src/java/core/org/krysalis/ruper/log
Modified Files:
Logger.java
Log Message:
Make ThreadLocal & have nested context
Index: Logger.java
===================================================================
RCS file: /cvsroot/metamorphosis/ruper2/src/java/core/org/krysalis/ruper/log/Logger.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** Logger.java 8 Sep 2003 23:21:40 -0000 1.9
--- Logger.java 9 Sep 2003 15:20:50 -0000 1.10
***************
*** 4,10 ****
package org.krysalis.ruper.log;
import java.util.Iterator;
import java.util.List;
! import java.util.Vector;
/**
--- 4,11 ----
package org.krysalis.ruper.log;
+ import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
! import java.util.Stack;
/**
***************
*** 14,28 ****
// Listener Tables...
! private Vector m_debugListeners = null;
! private Vector m_infoListeners = null;
! private Vector m_warnListeners = null;
! private Vector m_errorListeners = null;
// Chaining...
private Logger m_next = null;
! // The singleton instance
private static Logger l_logger = null;
//:TODO: Store a Stack/Current Logger object in a ThreadLocal
--- 15,64 ----
// Listener Tables...
! private List m_debugListeners = null;
! private List m_infoListeners = null;
! private List m_warnListeners = null;
! private List m_errorListeners = null;
// Chaining...
private Logger m_next = null;
! // The root singleton instance
private static Logger l_logger = null;
+ class LoggingContext {
+ //
+ // The context
+ //
+ Logger m_currentLogger = null;
+ Stack m_stack = null;
+
+ LoggingContext(Logger currentLogger) {
+ m_stack = new Stack();
+ push(currentLogger);
+ }
+
+ public void push(Logger currentLogger) {
+ m_stack.push(currentLogger);
+ m_currentLogger = (Logger) m_stack.peek();
+ }
+
+ public void pop(Logger currentLogger) {
+ Logger currentTop = (Logger) m_stack.pop();
+ if (currentTop != currentLogger) {
+ //:TODO: Warning?
+ }
+ // Set current
+ m_currentLogger = (Logger) m_stack.peek();
+ }
+
+ public Logger getCurrentLogger() {
+ return m_currentLogger;
+ }
+ }
+
+ //
+ // One per thread...
+ //
+ private static ThreadLocal l_context = null;
//:TODO: Store a Stack/Current Logger object in a ThreadLocal
***************
*** 32,36 ****
// get nested context...
-
static {
l_logger = new Logger();
--- 68,71 ----
***************
*** 40,43 ****
--- 75,84 ----
LogConstant.DEBUG_LISTENER,
new SimpleLogListener());
+
+ l_context = new ThreadLocal() {
+ protected synchronized Object initialValue() {
+ return l_logger.new LoggingContext(l_logger);
+ }
+ };
}
***************
*** 53,66 ****
private void initClass() {
! m_debugListeners = new Vector();
! m_infoListeners = new Vector();
! m_warnListeners = new Vector();
! m_errorListeners = new Vector();
}
public static Logger getLog() {
! return l_logger;
}
public void addListener(int listenerType, LogListener listener) {
switch (listenerType) {
--- 94,123 ----
private void initClass() {
! m_debugListeners = new ArrayList();
! m_infoListeners = new ArrayList();
! m_warnListeners = new ArrayList();
! m_errorListeners = new ArrayList();
}
public static Logger getLog() {
! return ((LoggingContext)l_context.get()).getCurrentLogger();
}
+ public static Logger pushContext() {
+ LoggingContext context = ((LoggingContext)l_context.get());
+ Logger newLogger = new Logger(context.getCurrentLogger());
+ context.push(newLogger);
+ return newLogger;
+ }
+
+ public static Logger pushContext(Logger newContext) {
+ ((LoggingContext)l_context.get()).push(newContext);
+ return newContext;
+ }
+
+ public static void popContext(Logger expectedLogger) {
+ ((LoggingContext)l_context.get()).pop(expectedLogger);
+ }
+
public void addListener(int listenerType, LogListener listener) {
switch (listenerType) {
***************
*** 115,134 ****
}
- private void notify(
- List listeners,
- int severity,
- Object message,
- Throwable thrower) {
-
- for (Iterator i = listeners.iterator(); i.hasNext();) {
- try {
- ((LogListener) i.next()).log(severity, message, thrower);
- }
- catch (Throwable t) {
- // Their problems are not ours...
- }
- }
- }
-
// DEBUG
public void debug(Object message) {
--- 172,175 ----
***************
*** 140,145 ****
public void debug(Object message, Throwable thrower) {
notify(m_debugListeners, LogConstant.DEBUG, message, thrower);
! if ( null != m_next )
! m_next.debug(message,thrower);
}
--- 181,186 ----
public void debug(Object message, Throwable thrower) {
notify(m_debugListeners, LogConstant.DEBUG, message, thrower);
! if (null != m_next)
! m_next.debug(message, thrower);
}
***************
*** 147,157 ****
public void info(Object message) {
notify(m_infoListeners, LogConstant.INFO, message, null);
! if ( null != m_next )
m_next.info(message);
}
public void info(Object message, Throwable thrower) {
notify(m_infoListeners, LogConstant.INFO, message, thrower);
! if ( null != m_next )
! m_next.info(message,thrower);
}
--- 188,198 ----
public void info(Object message) {
notify(m_infoListeners, LogConstant.INFO, message, null);
! if (null != m_next)
m_next.info(message);
}
public void info(Object message, Throwable thrower) {
notify(m_infoListeners, LogConstant.INFO, message, thrower);
! if (null != m_next)
! m_next.info(message, thrower);
}
***************
*** 159,169 ****
public void warn(Object message) {
notify(m_warnListeners, LogConstant.WARN, message, null);
! if ( null != m_next )
m_next.warn(message);
}
public void warn(Object message, Throwable thrower) {
notify(m_warnListeners, LogConstant.WARN, message, thrower);
! if ( null != m_next )
! m_next.warn(message,thrower);
}
--- 200,210 ----
public void warn(Object message) {
notify(m_warnListeners, LogConstant.WARN, message, null);
! if (null != m_next)
m_next.warn(message);
}
public void warn(Object message, Throwable thrower) {
notify(m_warnListeners, LogConstant.WARN, message, thrower);
! if (null != m_next)
! m_next.warn(message, thrower);
}
***************
*** 171,181 ****
public void error(Object message) {
notify(m_errorListeners, LogConstant.ERROR, message, null);
! if ( null != m_next )
m_next.error(message);
}
public void error(Object message, Throwable thrower) {
notify(m_errorListeners, LogConstant.ERROR, message, thrower);
! if ( null != m_next )
! m_next.error(message,thrower);
}
}
--- 212,238 ----
public void error(Object message) {
notify(m_errorListeners, LogConstant.ERROR, message, null);
! if (null != m_next)
m_next.error(message);
}
public void error(Object message, Throwable thrower) {
notify(m_errorListeners, LogConstant.ERROR, message, thrower);
! if (null != m_next)
! m_next.error(message, thrower);
! }
!
! private void notify(
! List listeners,
! int severity,
! Object message,
! Throwable thrower) {
!
! for (Iterator i = listeners.iterator(); i.hasNext();) {
! try {
! ((LogListener) i.next()).log(severity, message, thrower);
! }
! catch (Throwable t) {
! // Their problems are not ours...
! }
! }
}
}
-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.