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;
   
   }    
  
  
  

Reply via email to