costin 01/08/20 21:52:17 Modified: src/share/org/apache/tomcat/util/log Log.java LogHandler.java LogManager.java Log: Few fixes here. The changes in startup showed few obscure bugs on log initialization. Note that LogManager is used as a guard on all sensitive accesses to Log. Now adding a channel will 'fix' all logs that were created earlier for the channel ( with default logger ) This is important for loggers that are created before LogSetter module gets a chance to initialize the logging subsystem. In normal operation we don't do any logging before that anyway, but for debugging it's usefull ( and makes the package more usefull for use outside tomcat ) Revision Changes Path 1.6 +16 -4 jakarta-tomcat/src/share/org/apache/tomcat/util/log/Log.java Index: Log.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/log/Log.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- Log.java 2001/03/02 04:11:42 1.5 +++ Log.java 2001/08/21 04:52:17 1.6 @@ -124,7 +124,7 @@ sink/logger at runtime, and without requiring the log user to do any special action or be aware of the changes */ - private LogHandler proxy=new LogHandler(); // the default + private LogHandler proxy; // the default // Used to get access to other logging channels. // Can be replaced with an application-specific impl. @@ -133,9 +133,10 @@ // -------------------- Various constructors -------------------- - protected Log(String channel, String prefix, Object owner) { + protected Log(String channel, String prefix, LogHandler proxy, Object owner) { this.logname=channel; this.prefix=prefix; + this.proxy=proxy; } /** @@ -227,17 +228,28 @@ * have been created from the default LogManager, and * provide a special manager implemetation. */ - public static void setLogManager( LogManager lm ) { + public static LogManager setLogManager( LogManager lm ) { // can be changed only once - so that user // code can't change the log manager in running servers if( logManager.getClass() == LogManager.class ) { + LogManager oldLM=logManager; logManager=lm; + return oldLM; } + return null; } + public String getChannel( LogManager lm ) { + if( lm != logManager ) return null; + return logname; + } + public void setProxy( LogManager lm, LogHandler l ) { // only the manager can change the proxy - if( lm!= logManager ) return; + if( lm!= logManager ) { + System.out.println("Attempt to change proxy " + lm + " " + logManager); + return; + } proxy=l; } 1.2 +1 -1 jakarta-tomcat/src/share/org/apache/tomcat/util/log/LogHandler.java Index: LogHandler.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/log/LogHandler.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- LogHandler.java 2001/03/02 04:11:44 1.1 +++ LogHandler.java 2001/08/21 04:52:17 1.2 @@ -84,7 +84,7 @@ public class LogHandler { protected PrintWriter sink = defaultSink; - protected int level = Log.WARNING; + protected int level = Log.INFORMATION; /** 1.2 +25 -13 jakarta-tomcat/src/share/org/apache/tomcat/util/log/LogManager.java Index: LogManager.java =================================================================== RCS file: /home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/log/LogManager.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- LogManager.java 2001/03/02 04:11:44 1.1 +++ LogManager.java 2001/08/21 04:52:17 1.2 @@ -72,11 +72,19 @@ **/ public class LogManager { - static LogHandler defaultChannel=null; + static LogHandler defaultChannel=new LogHandler(); protected Hashtable loggers=new Hashtable(); protected Hashtable channels=new Hashtable(); + public Hashtable getLoggers() { + return loggers; + } + + public Hashtable getChannels() { + return channels; + } + public static void setDefault( LogHandler l ) { if( defaultChannel==null) defaultChannel=l; @@ -86,32 +94,36 @@ if(name==null) name=""; channels.put( name, logH ); + Enumeration enum=loggers.keys(); + while( enum.hasMoreElements() ) { + String k=(String)enum.nextElement(); + Log l=(Log)loggers.get( k ); + if( name.equals( l.getChannel( this ) )) { + l.setProxy( this, logH ); + } + } } /** Default method to create a log facade. */ public Log getLog( String channel, String prefix, - Object owner ) { + Object owner ) { if( prefix==null && owner!=null ) { String cname = owner.getClass().getName(); prefix = cname.substring( cname.lastIndexOf(".") +1); } + LogHandler proxy=(LogHandler)channels.get(channel); + if( proxy==null ) proxy=defaultChannel; + // user-level loggers - Log log=new Log( channel, prefix, owner ); + Log log=new Log( channel, prefix, proxy, owner ); loggers.put( channel + ":" + prefix, log ); - - // channels - LogHandler proxy=(LogHandler)channels.get(channel); - if( proxy!= null ) { - log.setProxy( this, proxy ); - } else { - if( defaultChannel!=null ) - log.setProxy( this, defaultChannel ); - } - + if( dL > 0 ) + System.out.println("getLog facade " + channel + ":" + prefix); return log; } + private static int dL=0; }