ceki        2003/12/15 13:49:02

  Added:       examples/src/factor factor.lcf NumberCruncher.java
                        NumberCruncherServer.java factor.html
                        NumberCruncherClient.java
               examples/src/subclass MyLogger.java MyLoggerFactory.java
                        mycat.good MyLoggerTest.java mycat.bad
               examples/src/jmx T.java
               examples/src/objectBased Base.java ChildTwo.java Test.java
                        ChildOne.java
               examples/src/trivial Trivial.java
               examples/src/pattern MyPatternLayout.java
                        CountingPatternConverter.java
               examples/src/customLevel XLevel.java
               examples/src package.html
  Removed:     examples/sort sort2.properties sort4.properties
                        sort1.properties Sort.java sort3.properties
                        SortAlgo.java
               examples/objectBased ChildTwo.java Base.java Test.java
                        ChildOne.java
               examples/subclass MyLogger.java mycat.good mycat.bad
                        MyLoggerFactory.java MyLoggerTest.java
               examples/customLevel XLevel.java
               examples/trivial Trivial.java
               examples/factor NumberCruncher.java
                        NumberCruncherClient.java NumberCruncherServer.java
                        factor.html factor.lcf
               examples/pattern CountingPatternConverter.java
                        MyPatternLayout.java
               examples package.html
               examples/jmx T.java
  Log:
  
  Moved examples/ files to examples/src
  
  Revision  Changes    Path
  1.1                  jakarta-log4j/examples/src/factor/factor.lcf
  
  Index: factor.lcf
  ===================================================================
  # For the general syntax of property based configuration files see the
  # documenation of org.apache.log4j.PropertyConfigurator.
  
  # The root category uses the appender called A1. Since no priority is
  # specified, the root category assumes the default priority for root
  # which is DEBUG in log4j. The root category is the only category that
  # has a default priority. All other categories need not be assigned a
  # priority in which case they inherit their priority from the
  # hierarchy.
  
  log4j.rootCategory=, A1
  
  # A1 is set to be a FileAppender which outputs to the file
  # "factor.log". Start the server NumberCruncherServer and two
  # NumberCruncherClients, and ask to factor two numbers
  # near-simultaneously. Notice that the log output from these two
  # requests are logged in the file factor.log. Nevertheless, the logs
  # of these requests can still be distinguished given their distinct
  # nested diagnostic contexts.
    
  log4j.appender.A1=org.apache.log4j.FileAppender
  log4j.appender.A1.File=factor.log
  log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  
  # Note the %x conversion specifier for NDC printing.
  log4j.appender.A1.layout.ConversionPattern=%-4r %-5p [%t] (%x) - %m\n
  
  
  
  
  1.1                  jakarta-log4j/examples/src/factor/NumberCruncher.java
  
  Index: NumberCruncher.java
  ===================================================================
  
  package factor;
  
  import java.rmi.Remote;
  import java.rmi.RemoteException;
  
  /**
     NumberCruncher's factor positive integers. See <a
     href=doc-files/NumberCruncher.java>source</a> code for more details.
  
     @author Ceki G&uuml;lc&uuml;
     
  */
  public interface NumberCruncher extends Remote {
  
    /**
       Factor a positive integer <code>number</code> and return its
       <em>distinct</em> factor's as an integer array.
    */
    int[] factor(int number) throws RemoteException;
  }
  
  
  
  1.1                  jakarta-log4j/examples/src/factor/NumberCruncherServer.java
  
  Index: NumberCruncherServer.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software
   * License version 1.1, a copy of which has been included with this
   * distribution in the LICENSE.APL file.  */
  
  package factor;
  
  import java.rmi.server.UnicastRemoteObject;
  import java.rmi.RemoteException;
  import java.rmi.Naming;
  import java.util.Vector;
  
  
  import org.apache.log4j.Category;
  import org.apache.log4j.NDC;
  import org.apache.log4j.PropertyConfigurator;
  
  /**
     A simple [EMAIL PROTECTED] NumberCruncher} implementation that logs its
     progress when factoring numbers. The purpose of the whole exercise
     is to show the use of nested diagnostic contexts in order to
     distinguish the log output from different client requests.
  
     <pre>
     <b>Usage:</b> java org.apache.log4j.examples.NumberCruncherServer 
<em>configFile</em>
      &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;where <em>configFile</em> is a log4j 
configuration file.
     </pre>
  
     We supply a simple config file <a href=doc-files/factor.lcf>factor.lcf</a>
     for directing log output to the file <code>factor.log</code>.
  
     <p>Try it yourself by starting a <code>NumberCruncherServer</code>
     and make queries from multiple [EMAIL PROTECTED] NumberCruncherClient
     NumberCruncherClients} to factor numbers.
  
     
     <p><b><a href="doc-files/factor.html">Sample output</a></b> shows the log
     output when two clients connect to the server near simultaneously.
        
     <p>See <a href=doc-files/NumberCruncherServer.java>source</a> code
     of <code>NumberCruncherServer</code> for more details.
  
     <p>Note that class files for the example code is not included in
     any of the distributed log4j jar files. You will have to add the
     directory <code>/dir-where-you-unpacked-log4j/classes</code> to
     your classpath before trying out the examples.
  
     
   */
  public class NumberCruncherServer extends UnicastRemoteObject
                                    implements  NumberCruncher {
  
  
    static Category cat = Category.getInstance(
                                        NumberCruncherServer.class.getName());
  
    public
    NumberCruncherServer() throws RemoteException {
    }
    
    public
    int[] factor(int number) throws RemoteException {
  
      // The client's host is an important source of information.
      try {
        NDC.push(this.getClientHost());
      }
      catch(java.rmi.server.ServerNotActiveException e) {
        // we are being called from same VM
        NDC.push("localhost");
      }
  
      // The information contained within the request is another source of
      // distinctive information. It might reveal the users name, date of request,
      // request ID etc. In servlet type environments, much information is
      // contained in cookies.
      NDC.push(String.valueOf(number));    
  
      cat.info("Beginning to factor.");
      if(number <= 0) {
        throw new IllegalArgumentException(number+" is not a positive integer.");
      }
      else if(number == 1)
         return new int[] {1};
      
      Vector factors = new Vector();
      int n = number;
  
      for(int i = 2; (i <= n) && (i*i <= number); i++) {
        // It is bad practice to place log requests within tight loops.
        // It is done here to show interleaved log output from
        // different requests. 
        cat.debug("Trying to see if " + i + " is a factor.");
  
        if((n % i) == 0) {
        cat.info("Found factor "+i);
        factors.addElement(new Integer(i));
        do {
          n /= i;
        } while((n % i) == 0);
        }
        // Placing artificial delays in tight-loops will also lead to sub-optimal
        // resuts. :-)
        delay(100);
      }
  
      if(n != 1) {
        cat.info("Found factor "+n);
        factors.addElement(new Integer(n));
      }
      
      int len = factors.size();
      
      int[] result = new int[len];
      for(int i = 0; i < len; i++) {
        result[i] = ((Integer) factors.elementAt(i)).intValue();
      }
  
      // Before leaving a thread we call NDC.remove. This deletes the reference
      // to the thread in the internal hash table. Version 0.8.5 introduces a
      // a lazy removal mechanism in case you forget to call remove when
      // exiting a thread. See the java documentation in NDC.remove for further
      // details.
      NDC.remove();
      
      return result;
    }
  
    static
    void usage(String msg) {
      System.err.println(msg);
      System.err.println(
       "Usage: java org.apache.log4j.examples.NumberCruncherServer configFile\n" +
       "   where configFile is a log4j configuration file.");
      System.exit(1);
    }
  
    public static
    void delay(int millis) {
      try{Thread.sleep(millis);}
      catch(InterruptedException e) {}
    }
    
    public static void main(String[] args) {
      if(args.length != 1) 
        usage("Wrong number of arguments.");
      
      NumberCruncherServer ncs;
      PropertyConfigurator.configure(args[0]);
      try {
        ncs = new NumberCruncherServer();
        Naming.rebind("Factor", ncs);
        cat.info("NumberCruncherServer bound and ready to serve.");
      }
      catch(Exception e) {
        cat.error("Could not bind NumberCruncherServer.", e);
        return;
      }
      NumberCruncherClient.loop(ncs);          
    }
  }
  
  
  
  1.1                  jakarta-log4j/examples/src/factor/factor.html
  
  Index: factor.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
  <html> <head>
  <title></title>
  </head>
  
  <body bgcolor=white>
  <center><h2>Log4j output of two near-simultaneous requests</h2></center>
  
  <p>Here is the logged output when two clients ask to factor two
  integers near-simultanesouly. The client on the host 128.178.50.84
  asks to factor the prime number 359.  The client on the host 9.4.2.196
  asks to factor the number 347 (also a prime).
  
  <p>The NDC is placed between parantheses in bold. The NDC information
  consists of the client's host and the number to factor. Since the two
  requests have distinct NDCs, their output can be easily separated.
  
  <pre>
  0      INFO  [main] <b>()</b> - NumberCruncherServer bound and ready to serve.
  276493 INFO  [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Beginning to factor.
  276495 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 2 is a factor.
  276699 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 3 is a factor.
  276908 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 4 is a factor.
  276983 INFO  [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Beginning to 
factor.
  276984 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 2 is a factor.
  277115 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 5 is a factor.
  277188 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 3 is a factor.
  277318 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 6 is a factor.
  277398 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 4 is a factor.
  277520 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 7 is a factor.
  277605 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347) </b>- Trying to 
see if 5 is a factor.
  277728 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 8 is a factor.
  277808 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 6 is a factor.
  277931 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 9 is a factor.
  278019 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 7 is a factor.
  278138 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 10 is a factor.
  278228 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 8 is a factor.
  278348 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 11 is a factor.
  278438 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 9 is a factor.
  278559 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 12 is a factor.
  278648 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 10 is a factor.
  278768 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 13 is a factor.
  278858 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 11 is a factor.
  278970 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 14 is a factor.
  279068 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 12 is a factor.
  279178 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 15 is a factor.
  279270 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 13 is a factor.
  279387 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 16 is a factor.
  279478 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 14 is a factor.
  279598 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 17 is a factor.
  279688 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 15 is a factor.
  279808 DEBUG [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Trying to see if 18 is a factor.
  279898 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 16 is a factor.
  280018 INFO  [RMI TCP Connection(7)-128.178.50.84] <b>(128.178.50.84 359)</b> - 
Found factor 359
  280108 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 17 is a factor.
  280318 DEBUG [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Trying to 
see if 18 is a factor.
  280520 INFO  [RMI TCP Connection(8)-9.4.2.196] <b>(9.4.2.196 347)</b> - Found factor 
347
  </pre>
  
  
  <hr>
  <address></address>
  <!-- hhmts start -->
  Last modified: Fri May  5 10:36:05 MDT 2000
  <!-- hhmts end -->
  </body> </html>
  
  
  
  1.1                  jakarta-log4j/examples/src/factor/NumberCruncherClient.java
  
  Index: NumberCruncherClient.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software
   * License version 1.1, a copy of which has been included with this
   * distribution in the LICENSE.APL file.  */
  
  package factor;
  
  import java.rmi.RemoteException;
  import java.rmi.Naming;
  import java.io.*;
  
  /**
     NumberCruncherClient is a simple client for factoring integers. A
     remote NumberCruncher is contacted and asked to factor an
     integer. The factors returned by the [EMAIL PROTECTED] NumberCruncherServer}
     are displayed on the screen.
  
     <p>See <a href=doc-files/NumberCruncherClient.java>source</a> code of 
     <code>NumberCruncherClient</code> for more details.
  
     <pre>
     <b>Usage:</b> java  org.apache.log4j.examples.NumberCruncherClient HOST
      &nbsp;&nbsp;&nbsp;&nbsp;where HOST is the machine where the NumberCruncherServer 
is running
     </pre>
     
     <p>Note that class files for the example code is not included in
     any of the distributed log4j jar files. You will have to add the
     directory <code>/dir-where-you-unpacked-log4j/classes</code> to
     your classpath before trying out the examples.
  
     @author Ceki G&uuml;lc&uuml;
     
   */
  public class NumberCruncherClient {
  
  
    public static void main(String[] args) {
      if(args.length == 1) {
        try {
          String url = "rmi://"+args[0]+ "/Factor";
                NumberCruncher nc = (NumberCruncher) Naming.lookup(url);
        loop(nc);
        }
        catch(Exception e) {
        e.printStackTrace();
        }      
      }
      else
        usage("Wrong number of arguments.");
    }
  
    static
    void usage(String msg) {
      System.err.println(msg);
      System.err.println(
       "Usage: java org.apache.log4j.examples.NumberCruncherClient HOST\n" +
       "   where HOST is the machine where the NumberCruncherServer is running.");
      System.exit(1);
    }
  
  
    static
    void loop(NumberCruncher nc) {
      BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
      int i = 0;
      while (true) {
        System.out.print("Enter a number to factor, '-1' to quit: ");      
        try {
        i = Integer.parseInt(in.readLine());
        }
        catch(Exception e) {
        e.printStackTrace();
        }
        if(i == -1) {
        System.out.print("Exiting loop.");
        return;
        }
        else {
        try {
          System.out.println("Will attempt to factor "+i);
          int[] factors = nc.factor(i);
          System.out.print("The factors of "+i+" are");
          for(int k=0; k < factors.length; k++) {
            System.out.print(" " + factors[k]);
          }
          System.out.println(".");
        }
        catch(RemoteException e) {
          System.err.println("Could not factor "+i);
          e.printStackTrace();
        }
        }
      }
    }
  }
  
  
  
  1.1                  jakarta-log4j/examples/src/subclass/MyLogger.java
  
  Index: MyLogger.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software
   * License version 1.1, a copy of which has been included with this
   * distribution in the LICENSE.txt file.  */
  
  package subclass;
  
  import org.apache.log4j.*;
  import customLevel.XLevel;
  
  /**
     A simple example showing logger subclassing. 
  
     <p>See <b><a href="doc-files/MyLogger.java">source code</a></b>
     for more details.
  
     <p>See [EMAIL PROTECTED] MyLoggerTest} for a usage example.
     
   */
  public class MyLogger extends Logger {
  
    // It's usually a good idea to add a dot suffix to the fully
    // qualified class name. This makes caller localization to work
    // properly even from classes that have almost the same fully
    // qualified class name as MyLogger, e.g. MyLoggerTest.
    static String FQCN = MyLogger.class.getName() + ".";
  
    // It's enough to instantiate a factory once and for all.
    private static MyLoggerFactory myFactory = new MyLoggerFactory();
  
    /**
       Just calls the parent constuctor.
     */
    public MyLogger(String name) {
      super(name);
    }
  
    /**
       Overrides the standard debug method by appending " world" at the
       end of each message.  */
    public 
    void debug(Object message) {
      super.log(FQCN, Level.DEBUG, message + " world.", null);    
    }
  
    /**
       This method overrides [EMAIL PROTECTED] Logger#getInstance} by supplying
       its own factory type as a parameter.
    */
    public 
    static
    Category getInstance(String name) {
      return Logger.getLogger(name, myFactory); 
    }
    
    /**
       This method overrides [EMAIL PROTECTED] Logger#getLogger} by supplying
       its own factory type as a parameter.
    */
    public 
    static
    Logger getLogger(String name) {
      return Logger.getLogger(name, myFactory); 
    }
  
    public
    void trace(Object message) {
      super.log(FQCN, XLevel.TRACE, message, null); 
    }
  }
  
  
  
  
  
  1.1                  jakarta-log4j/examples/src/subclass/MyLoggerFactory.java
  
  Index: MyLoggerFactory.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software
   * License version 1.1, a copy of which has been included with this
   * distribution in the LICENSE.txt file.  */
  
  package subclass;
  
  import org.apache.log4j.Logger;
  import org.apache.log4j.spi.LoggerFactory;
  
  /**
     A factory that makes new [EMAIL PROTECTED] MyLogger} objects.
  
     See <b><a href="doc-files/MyLoggerFactory.java">source
     code</a></b> for more details.
  
     @author Ceki G&uuml;lc&uuml; */
  public class MyLoggerFactory implements LoggerFactory {
  
    /**
       The constructor should be public as it will be called by
       configurators in different packages.  */
    public
    MyLoggerFactory() {
    }
  
    public
    Logger makeNewLoggerInstance(String name) {
      return new MyLogger(name);
    }
  }
  
  
  
  1.1                  jakarta-log4j/examples/src/subclass/mycat.good
  
  Index: mycat.good
  ===================================================================
  # Setting the logger factory to MyLoggerFactory solves the
  # ClassCastException problem encountered with the "mycat.bad"
  # configuration file.
  
  log4j.loggerFactory=examples.subclass.MyLoggerFactory
  
  
  # The usual stuff. Note that A1 is configured in root not in "some.cat"
  
  log4j.rootLogger=DEBUG, A1
  log4j.appender.A1=org.apache.log4j.ConsoleAppender
  
  log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  log4j.appender.A1.layout.ConversionPattern=%5p [%t] %c - %m%n
  
  
  # Set the priority of "some.cat" to TRACE (defined in
  # examples.customLevel.XLevel). Since we specified MyLoggerFactory as
  # the logger factory, the following line willl also have the side
  # effect of instanciating a MyLogger object having the name
  # "some.cat".
  
  log4j.logger.some.cat=TRACE#examples.customLevel.XLevel
  
  
  
  
  1.1                  jakarta-log4j/examples/src/subclass/MyLoggerTest.java
  
  Index: MyLoggerTest.java
  ===================================================================
  /*
   * Copyright (C) The Apache Software Foundation. All rights reserved.
   *
   * This software is published under the terms of the Apache Software
   * License version 1.1, a copy of which has been included with this
   * distribution in the LICENSE.txt file.  */
  
  package subclass;
  
  import org.apache.log4j.*;
  import org.apache.log4j.xml.DOMConfigurator;
  import org.apache.log4j.PropertyConfigurator;
  import org.apache.log4j.helpers.LogLog;
  
  /**
     A simple example showing logger subclassing. 
  
     <p>The example should make it clear that subclasses follow the
     hierarchy. You should also try running this example with a <a
     href="doc-files/mycat.bad">bad</a> and <a
     href="doc-files/mycat.good">good</a> configuration file samples.
  
     <p>See <b><a
     href="doc-files/MyLogger.java">source code</a></b> for more details.
  */
  public class MyLoggerTest {
  
    /**
       When called wihtout arguments, this program will just print 
       <pre>
         DEBUG [main] some.cat - Hello world.
       </pre>
       and exit.
       
       <b>However, it can be called with a configuration file in XML or
       properties format.
  
     */
    static public void main(String[] args) {
      
      if(args.length == 0) {
        // Note that the appender is added to root but that the log
        // request is made to an instance of MyLogger. The output still
        // goes to System.out.
        Logger root = Logger.getRootLogger();
        Layout layout = new PatternLayout("%p [%t] %c (%F:%L) - %m%n");
        root.addAppender(new ConsoleAppender(layout, ConsoleAppender.SYSTEM_OUT));
      }
      else if(args.length == 1) {
        if(args[0].endsWith("xml")) {
        DOMConfigurator.configure(args[0]);
        } else {
        PropertyConfigurator.configure(args[0]);
        }
      } else {
        usage("Incorrect number of parameters.");
      }
      try {
        MyLogger c = (MyLogger) MyLogger.getInstance("some.cat");    
        c.trace("Hello");
        c.debug("Hello");
      } catch(ClassCastException e) {
        LogLog.error("Did you forget to set the factory in the config file?", e);
      }
    }
  
    static
    void usage(String errMsg) {
      System.err.println(errMsg);
      System.err.println("\nUsage: "+MyLogger.class.getName() + "[configFile]\n"
                  + " where *configFile* is an optional configuration file, "+
                       "either in properties or XML format.");
      System.exit(1);
    }
  }
  
  
  
  1.1                  jakarta-log4j/examples/src/subclass/mycat.bad
  
  Index: mycat.bad
  ===================================================================
  
  # The usual stuff. Note that A1 is configured in root not in "some.cat"
  log4j.rootLogger=DEBUG, A1
  log4j.appender.A1=org.apache.log4j.ConsoleAppender
  
  log4j.appender.A1.layout=org.apache.log4j.PatternLayout
  log4j.appender.A1.layout.ConversionPattern=%5p [%t] %c - %m%n
  
  # Set the priority of "some.cat" to TRACE (defined in
  # examples.customLevel.XLevel). This will actually have the side
  # effect of instanciating a logger object having the name "some.cat"
  # this will cause a ClassCastException if the logger object is cast
  # as a MyLogger object.
  
  log4j.logger.some.cat=TRACE#examples.customLevel.XLevel
  
  
  
  
  
  
  1.1                  jakarta-log4j/examples/src/jmx/T.java
  
  Index: T.java
  ===================================================================
  package jmx;
  
  import org.apache.log4j.jmx.Agent;
  import org.apache.log4j.Category;
  import org.apache.log4j.BasicConfigurator;
  import org.apache.log4j.*;
  
  public class T {
  
  
    public static void main(String[] args) {
      Category cat = Category.getInstance(T.class);
      Layout layout = new PatternLayout("%r %p [%t] %c - %m%n");
      ConsoleAppender consoleAppender = new ConsoleAppender(layout);
                                                          
      consoleAppender.setName("console");
      BasicConfigurator.configure(consoleAppender);
      Agent agent = new Agent();
      agent.start();
    }
    
  }
  
  
  
  1.1                  jakarta-log4j/examples/src/objectBased/Base.java
  
  Index: Base.java
  ===================================================================
  /*
   * ============================================================================
   *                   The Apache Software License, Version 1.1
   * ============================================================================
   *
   *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without modifica-
   * tion, are permitted provided that the following conditions are met:
   *
   * 1. Redistributions of  source code must  retain the above copyright  notice,
   *    this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright notice,
   *    this list of conditions and the following disclaimer in the documentation
   *    and/or other materials provided with the distribution.
   *
   * 3. The end-user documentation included with the redistribution, if any, must
   *    include  the following  acknowledgment:  "This product includes  software
   *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
   *    Alternately, this  acknowledgment may  appear in the software itself,  if
   *    and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "log4j" and  "Apache Software Foundation"  must not be used to
   *    endorse  or promote  products derived  from this  software without  prior
   *    written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products  derived from this software may not  be called "Apache", nor may
   *    "Apache" appear  in their name,  without prior written permission  of the
   *    Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * This software  consists of voluntary contributions made  by many individuals
   * on  behalf of the Apache Software  Foundation.  For more  information on the
   * Apache Software Foundation, please see <http://www.apache.org/>.
   *
   */
  
  package objectBased;
  
  import org.apache.log4j.Logger;
  
  
  /**
   * 
   * An almost trivially simple Base class.
   * 
   * It uses the [EMAIL PROTECTED] #getLogger} method to retreive the logger to use. 
This 
   * method can be overrriden by derived clases to acheive "object" based logging.
   * 
   * @author Scott Melcher
   * @author G&uuml;lc&uuml;
   */
  public class Base {
    static Logger logger = Logger.getLogger(Base.class);
  
    public void myMethod() {
      getLogger().debug("logging message");
    }
  
    public Logger getLogger() {
      System.out.println("Base.getLogger called");
      return Base.logger;
    }
    
  }
  
  
  
  1.1                  jakarta-log4j/examples/src/objectBased/ChildTwo.java
  
  Index: ChildTwo.java
  ===================================================================
  /*
   * ============================================================================
   *                   The Apache Software License, Version 1.1
   * ============================================================================
   *
   *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without modifica-
   * tion, are permitted provided that the following conditions are met:
   *
   * 1. Redistributions of  source code must  retain the above copyright  notice,
   *    this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright notice,
   *    this list of conditions and the following disclaimer in the documentation
   *    and/or other materials provided with the distribution.
   *
   * 3. The end-user documentation included with the redistribution, if any, must
   *    include  the following  acknowledgment:  "This product includes  software
   *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
   *    Alternately, this  acknowledgment may  appear in the software itself,  if
   *    and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "log4j" and  "Apache Software Foundation"  must not be used to
   *    endorse  or promote  products derived  from this  software without  prior
   *    written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products  derived from this software may not  be called "Apache", nor may
   *    "Apache" appear  in their name,  without prior written permission  of the
   *    Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * This software  consists of voluntary contributions made  by many individuals
   * on  behalf of the Apache Software  Foundation.  For more  information on the
   * Apache Software Foundation, please see <http://www.apache.org/>.
   *
   */
  
  package objectBased;
  
  import org.apache.log4j.Logger;
  
  public class ChildTwo extends Base {
    static Logger logger = Logger.getLogger(ChildTwo.class);
  
    public void execute() {
      myMethod();
    }
    
    public Logger getLogger() {
      System.out.println("ChildTwo.getLogger called");
      return ChildTwo.logger;
    }
  }
  
  
  
  1.1                  jakarta-log4j/examples/src/objectBased/Test.java
  
  Index: Test.java
  ===================================================================
  /*
   * ============================================================================
   *                   The Apache Software License, Version 1.1
   * ============================================================================
   *
   *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without modifica-
   * tion, are permitted provided that the following conditions are met:
   *
   * 1. Redistributions of  source code must  retain the above copyright  notice,
   *    this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright notice,
   *    this list of conditions and the following disclaimer in the documentation
   *    and/or other materials provided with the distribution.
   *
   * 3. The end-user documentation included with the redistribution, if any, must
   *    include  the following  acknowledgment:  "This product includes  software
   *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
   *    Alternately, this  acknowledgment may  appear in the software itself,  if
   *    and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "log4j" and  "Apache Software Foundation"  must not be used to
   *    endorse  or promote  products derived  from this  software without  prior
   *    written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products  derived from this software may not  be called "Apache", nor may
   *    "Apache" appear  in their name,  without prior written permission  of the
   *    Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * This software  consists of voluntary contributions made  by many individuals
   * on  behalf of the Apache Software  Foundation.  For more  information on the
   * Apache Software Foundation, please see <http://www.apache.org/>.
   *
   */
  
  package objectBased;
  
  import org.apache.log4j.BasicConfigurator;
  import org.apache.log4j.Level;
  import org.apache.log4j.Logger;
  
  
  public class Test {
    public static void main(String[] args) {
      BasicConfigurator.configure();
      
     Logger logger_c2 = Logger.getLogger(ChildTwo.class);
     logger_c2.setLevel(Level.INFO);
      
     
      ChildOne c1 = new ChildOne();
      c1.execute();
      
  
      ChildTwo c2 = new ChildTwo();
      c2.execute();
    }
  }
  
  
  
  1.1                  jakarta-log4j/examples/src/objectBased/ChildOne.java
  
  Index: ChildOne.java
  ===================================================================
  /*
   * ============================================================================
   *                   The Apache Software License, Version 1.1
   * ============================================================================
   *
   *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without modifica-
   * tion, are permitted provided that the following conditions are met:
   *
   * 1. Redistributions of  source code must  retain the above copyright  notice,
   *    this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright notice,
   *    this list of conditions and the following disclaimer in the documentation
   *    and/or other materials provided with the distribution.
   *
   * 3. The end-user documentation included with the redistribution, if any, must
   *    include  the following  acknowledgment:  "This product includes  software
   *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
   *    Alternately, this  acknowledgment may  appear in the software itself,  if
   *    and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "log4j" and  "Apache Software Foundation"  must not be used to
   *    endorse  or promote  products derived  from this  software without  prior
   *    written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products  derived from this software may not  be called "Apache", nor may
   *    "Apache" appear  in their name,  without prior written permission  of the
   *    Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * This software  consists of voluntary contributions made  by many individuals
   * on  behalf of the Apache Software  Foundation.  For more  information on the
   * Apache Software Foundation, please see <http://www.apache.org/>.
   *
   */
  
  package objectBased;
  
  import org.apache.log4j.Logger;
  
  public class ChildOne extends Base {
    static Logger logger = Logger.getLogger(ChildOne.class);
  
    public void execute() {
      myMethod();
    }
    
    public Logger getLogger() {
      System.out.println("ChildOne.getLogger called");
      return ChildOne.logger;
    }
  }
  
  
  
  1.1                  jakarta-log4j/examples/src/trivial/Trivial.java
  
  Index: Trivial.java
  ===================================================================
  /*
   * ============================================================================
   *                   The Apache Software License, Version 1.1
   * ============================================================================
   *
   *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without modifica-
   * tion, are permitted provided that the following conditions are met:
   *
   * 1. Redistributions of  source code must  retain the above copyright  notice,
   *    this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright notice,
   *    this list of conditions and the following disclaimer in the documentation
   *    and/or other materials provided with the distribution.
   *
   * 3. The end-user documentation included with the redistribution, if any, must
   *    include  the following  acknowledgment:  "This product includes  software
   *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
   *    Alternately, this  acknowledgment may  appear in the software itself,  if
   *    and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "log4j" and  "Apache Software Foundation"  must not be used to
   *    endorse  or promote  products derived  from this  software without  prior
   *    written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products  derived from this software may not  be called "Apache", nor may
   *    "Apache" appear  in their name,  without prior written permission  of the
   *    Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * This software  consists of voluntary contributions made  by many individuals
   * on  behalf of the Apache Software  Foundation.  For more  information on the
   * Apache Software Foundation, please see <http://www.apache.org/>.
   *
   */
  
  package trivial;
  
  import org.apache.log4j.BasicConfigurator;
  import org.apache.log4j.Category;
  import org.apache.log4j.NDC;
  
  
  /**
     View the <a href="doc-files/Trivial.java">source code</a> of this a
     trivial usage example. Running <code>java examples.Trivial</code>
     should output something similar to:
  
     <pre>
        0    INFO  [main] examples.Trivial (Client #45890) - Awake awake. Put on thy 
strength.
        15   DEBUG [main] examples.Trivial (Client #45890 DB) - Now king David was old.
        278  INFO  [main] examples.Trivial$InnerTrivial (Client #45890) - Entered foo.
        293  INFO  [main] examples.Trivial (Client #45890) - Exiting Trivial.
     </pre>
  
     <p> The increasing numbers at the beginning of each line are the
     times elapsed since the start of the program. The string between
     the parentheses is the nested diagnostic context.
  
     <p>See [EMAIL PROTECTED] Sort} and [EMAIL PROTECTED] SortAlgo} for sligtly more 
elaborate
     examples.
  
     <p>Note thent class files for the example code is not included in
     any of the distributed log4j jar files. You will have to add the
     directory <code>/dir-where-you-unpacked-log4j/classes</code> to
     your classpath before trying out the examples.
  
   */
  public class Trivial {
    static Category cat = Category.getInstance(Trivial.class.getName());
  
    public static void main(String[] args) {
      BasicConfigurator.configure();
      NDC.push("Client #45890");
  
      cat.info("Awake awake. Put on thy strength.");
      Trivial.foo();
      InnerTrivial.foo();
      cat.info("Exiting Trivial.");
    }
  
    static void foo() {
      NDC.push("DB");
      cat.debug("Now king David was old.");
      NDC.pop();
    }
  
    static class InnerTrivial {
      static Category cat = Category.getInstance(InnerTrivial.class.getName());
  
      static void foo() {
        cat.info("Entered foo.");
      }
    }
  }
  
  
  
  1.1                  jakarta-log4j/examples/src/pattern/MyPatternLayout.java
  
  Index: MyPatternLayout.java
  ===================================================================
  /*
   * ============================================================================
   *                   The Apache Software License, Version 1.1
   * ============================================================================
   *
   *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without modifica-
   * tion, are permitted provided that the following conditions are met:
   *
   * 1. Redistributions of  source code must  retain the above copyright  notice,
   *    this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright notice,
   *    this list of conditions and the following disclaimer in the documentation
   *    and/or other materials provided with the distribution.
   *
   * 3. The end-user documentation included with the redistribution, if any, must
   *    include  the following  acknowledgment:  "This product includes  software
   *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
   *    Alternately, this  acknowledgment may  appear in the software itself,  if
   *    and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "log4j" and  "Apache Software Foundation"  must not be used to
   *    endorse  or promote  products derived  from this  software without  prior
   *    written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products  derived from this software may not  be called "Apache", nor may
   *    "Apache" appear  in their name,  without prior written permission  of the
   *    Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * This software  consists of voluntary contributions made  by many individuals
   * on  behalf of the Apache Software  Foundation.  For more  information on the
   * Apache Software Foundation, please see <http://www.apache.org/>.
   *
   */
  
  package pattern;
  
  import org.apache.log4j.ConsoleAppender;
  import org.apache.log4j.PatternLayout;
  import org.apache.log4j.Logger;
  import org.apache.log4j.Layout;
  
  /**
   * 
   * Example showing how to extend PatternLayout to recognize additional 
   * conversion words without adding.
   * 
   * <p>In this case MyPatternLayout recognizes %counter conversion word. 
   * It outputs the value of an internal counter which is also incremented at 
   * each call.
   * 
   * @see org.apache.log4j.PatternLayout
   * @author Anders Kristensen
   * @author Ceki G&uuml;lc&uuml;
   */
  
  public class MyPatternLayout extends PatternLayout {
    public MyPatternLayout() {
      super();
    }
  
    public MyPatternLayout(String pattern) {
      super(pattern);
    }
  
    /**
      Activates the conversion pattern. Do not forget to call this method after
      you change the parameters of the PatternLayout instance.
    */
    public void activateOptions() {
      this.addConversionRule("counter", CountingPatternConverter.class.getName());
      super.activateOptions();
    }
  
    public static void main(String[] args) {
      Layout layout = new MyPatternLayout("[counter=%.10#] - %m%n");
      Logger logger = Logger.getLogger("some.cat");
      logger.addAppender(new ConsoleAppender(layout, ConsoleAppender.SYSTEM_OUT));
      logger.debug("Hello, log");
      logger.info("Hello again...");
    }
  }
  
  
  
  1.1                  jakarta-log4j/examples/src/pattern/CountingPatternConverter.java
  
  Index: CountingPatternConverter.java
  ===================================================================
  /*
   * ============================================================================
   *                   The Apache Software License, Version 1.1
   * ============================================================================
   *
   *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without modifica-
   * tion, are permitted provided that the following conditions are met:
   *
   * 1. Redistributions of  source code must  retain the above copyright  notice,
   *    this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright notice,
   *    this list of conditions and the following disclaimer in the documentation
   *    and/or other materials provided with the distribution.
   *
   * 3. The end-user documentation included with the redistribution, if any, must
   *    include  the following  acknowledgment:  "This product includes  software
   *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
   *    Alternately, this  acknowledgment may  appear in the software itself,  if
   *    and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "log4j" and  "Apache Software Foundation"  must not be used to
   *    endorse  or promote  products derived  from this  software without  prior
   *    written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products  derived from this software may not  be called "Apache", nor may
   *    "Apache" appear  in their name,  without prior written permission  of the
   *    Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * This software  consists of voluntary contributions made  by many individuals
   * on  behalf of the Apache Software  Foundation.  For more  information on the
   * Apache Software Foundation, please see <http://www.apache.org/>.
   *
   */
  
  package pattern;
  
  import org.apache.log4j.pattern.PatternConverter;
  import org.apache.log4j.spi.LoggingEvent;
  
  
  public class CountingPatternConverter extends PatternConverter {
    StringBuffer buf;
    int counter = 0;
  
    public CountingPatternConverter() {
      super();
      this.buf = new StringBuffer(5);
    }
  
    public StringBuffer convert(LoggingEvent event) {
      if(buf.capacity() > 64) {
        buf = new StringBuffer(5);
      } else {
        buf.setLength(0);
      }
      return buf.append(String.valueOf(++counter));
    }
  }
  
  
  
  1.1                  jakarta-log4j/examples/src/customLevel/XLevel.java
  
  Index: XLevel.java
  ===================================================================
  /*
   * ============================================================================
   *                   The Apache Software License, Version 1.1
   * ============================================================================
   *
   *    Copyright (C) 1999 The Apache Software Foundation. All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without modifica-
   * tion, are permitted provided that the following conditions are met:
   *
   * 1. Redistributions of  source code must  retain the above copyright  notice,
   *    this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright notice,
   *    this list of conditions and the following disclaimer in the documentation
   *    and/or other materials provided with the distribution.
   *
   * 3. The end-user documentation included with the redistribution, if any, must
   *    include  the following  acknowledgment:  "This product includes  software
   *    developed  by the  Apache Software Foundation  (http://www.apache.org/)."
   *    Alternately, this  acknowledgment may  appear in the software itself,  if
   *    and wherever such third-party acknowledgments normally appear.
   *
   * 4. The names "log4j" and  "Apache Software Foundation"  must not be used to
   *    endorse  or promote  products derived  from this  software without  prior
   *    written permission. For written permission, please contact
   *    [EMAIL PROTECTED]
   *
   * 5. Products  derived from this software may not  be called "Apache", nor may
   *    "Apache" appear  in their name,  without prior written permission  of the
   *    Apache Software Foundation.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES,
   * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
   * FITNESS  FOR A PARTICULAR  PURPOSE ARE  DISCLAIMED.  IN NO  EVENT SHALL  THE
   * APACHE SOFTWARE  FOUNDATION  OR ITS CONTRIBUTORS  BE LIABLE FOR  ANY DIRECT,
   * INDIRECT, INCIDENTAL, SPECIAL,  EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLU-
   * DING, BUT NOT LIMITED TO, PROCUREMENT  OF SUBSTITUTE GOODS OR SERVICES; LOSS
   * OF USE, DATA, OR  PROFITS; OR BUSINESS  INTERRUPTION)  HOWEVER CAUSED AND ON
   * ANY  THEORY OF LIABILITY,  WHETHER  IN CONTRACT,  STRICT LIABILITY,  OR TORT
   * (INCLUDING  NEGLIGENCE OR  OTHERWISE) ARISING IN  ANY WAY OUT OF THE  USE OF
   * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   *
   * This software  consists of voluntary contributions made  by many individuals
   * on  behalf of the Apache Software  Foundation.  For more  information on the
   * Apache Software Foundation, please see <http://www.apache.org/>.
   *
   */
  
  package customLevel;
  
  import org.apache.log4j.Level;
  
  /**
     This class introduces a new level level called TRACE. TRACE has
     lower level than DEBUG.
  
   */
  public class XLevel extends Level {
    public static final int TRACE_INT = Level.DEBUG_INT - 1;
    public static final int LETHAL_INT = Level.FATAL_INT + 1;
    private static String TRACE_STR = "TRACE";
    private static String LETHAL_STR = "LETHAL";
    public static final XLevel TRACE = new XLevel(TRACE_INT, TRACE_STR, 7);
    public static final XLevel LETHAL = new XLevel(LETHAL_INT, LETHAL_STR, 0);
  
    protected XLevel(int level, String strLevel, int syslogEquiv) {
      super(level, strLevel, syslogEquiv);
    }
  
    /**
       Convert the string passed as argument to a level. If the
       conversion fails, then this method returns [EMAIL PROTECTED] #TRACE}.
    */
    public static Level toLevel(String sArg) {
      return (Level) toLevel(sArg, XLevel.TRACE);
    }
  
    public static Level toLevel(String sArg, Level defaultValue) {
      if (sArg == null) {
        return defaultValue;
      }
  
      String stringVal = sArg.toUpperCase();
  
      if (stringVal.equals(TRACE_STR)) {
        return XLevel.TRACE;
      } else if (stringVal.equals(LETHAL_STR)) {
        return XLevel.LETHAL;
      }
  
      return Level.toLevel(sArg, (Level) defaultValue);
    }
  
    public static Level toLevel(int i) throws IllegalArgumentException {
      switch (i) {
      case TRACE_INT:
        return XLevel.TRACE;
  
      case LETHAL_INT:
        return XLevel.LETHAL;
      }
  
      return Level.toLevel(i);
    }
  }
  
  
  
  1.1                  jakarta-log4j/examples/src/package.html
  
  Index: package.html
  ===================================================================
  <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
  <html> <head>
  <title></title>
  </head>
  <body>
   
  <p>Example usage of log4j including source code.
  
  <p>Note that class files for the example code is not included in any
  of the distributed log4j jar files. You will have to add the directory
  <code>/dir-where-you-unpacked-log4j/classes</code> to your classpath
  before trying out the examples.
  
  <p>This package's shows how log4j can be used to output log
  statements.
  
  <ul>
  
    <p><li>See source code of <a
  href="doc-files/Trivial.java">Trivial.java</a> for a trivial usage
  example.
  
        <p><li>See source code of <a href="doc-files/Sort.java">Sort.java</a> and
  <a href="doc-files/SortAlgo.java">SortAlgo.java</a> to for a slightly
  more advanced example.
  
  <p><li>See [EMAIL PROTECTED] org.apache.log4j.examples.NumberCruncherServer} for a 
[EMAIL PROTECTED]
  org.apache.log4j.NDC} based technique to distinguish the log output from
  requests from multiple clients.
  
      </ul>
  <hr>
  <address></address>
  <!-- hhmts start -->
  Last modified: Fri May  5 10:20:04 MDT 2000
  <!-- hhmts end -->
  </body> </html>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to