Hi,

I'm facing a problem.  Kindly provide me a solution.


Package log4j has a class file CategoryTester.class
Package log4j.child has a class file Bar.class
Package log4j.child.child1 has a class Bar1.class

The following lines are specified in a configuration file and read using 
PropertyConfigurator .

log4j.category.log4j.CategoryTester=DEBUG, A2

# A2 is set to be a ConsoleAppender.
log4j.appender.A2=org.apache.log4j.ConsoleAppender

# A2 uses PatternLayout.
log4j.appender.A2.layout=org.apache.log4j.PatternLayout
log4j.appender.A2.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n


#-----------------------------------------------------------------------------
log4j.category.log4j.child=DEBUG, A3

# A3 is set to be a RollingFileAppender
log4j.appender.A3=org.apache.log4j.RollingFileAppender
log4j.appender.A3.File=example.log
log4j.appender.A3.MaxFileSize=100KB

# Keep one backup file
log4j.appender.A3.MaxBackupIndex=1

log4j.appender.A3.layout=org.apache.log4j.PatternLayout
log4j.appender.A3.layout.ConversionPattern=%p %t %c - %m%n

Bar.class has additivity turned to false using the method, 
cat.setAdditivity( false ), where cat is of type Category.

The code for CategoryTester , Bar and Bar1 is mentioned below.

CLASS CATEGORYTESTER.JAVA

package log4j;

import org.apache.log4j.Category;
import org.apache.log4j.Priority;
import org.apache.log4j.BasicConfigurator;
import org.apache.log4j.PropertyConfigurator;

import log4j.child.Bar;


public class CategoryTester{
    static Category category = Category.getInstance( 
CategoryTester.class.getName( ) );

    public static void main(String[] args) {
        new CategoryTester( args );
    }
        public CategoryTester( String args[] ){
         // Set up a simple configuration that logs on the console.
//         BasicConfigurator.configure();
         PropertyConfigurator.configure(args[0]);
         category.setAdditivity( false );
         category.info("Entering application.");
         Bar bar = new Bar();
         bar.doIt();
         category.info("Exiting application.");
   }
}

CLASS BAR.JAVA
package log4j.child;

import org.apache.log4j.Category;
import log4j.child.child1.Bar1;

 public class Bar {
   static Category cat = Category.getInstance( Bar.class.getName( ) );


   public void doIt() {
       cat.setAdditivity( false );
       new Bar1( ).doIt( );
       cat.debug("Did it again in Bar!");
   }
 }

CLASS BAR1.JAVA
package log4j.child.child1;

import org.apache.log4j.Category;

 public class Bar1 {
   static Category cat = Category.getInstance( Bar1.class.getName( ) );


   public void doIt() {
       cat.debug("Did it again in Bar1!");
   }
 }

When I execute CategoryTester it throws,
log4j:ERROR No appenders could be found for category (log4j.child.Bar).
log4j:ERROR Please initialize the log4j system properly.

1.  But, Bar1.java is able to log in example.log while Bar is not.  Why 
is it so?  
2.  If I need both to be logged into example.log file what changes I 
need to make in the configuration file?  
3.  My intention is, the logging statements of Bar & Bar1 should not be 
logged in ConsoleAppender which the CategoryTester uses but in the 
"example.log" file.  One work around for this is explicitly specify two 
entries, one each for Bar and Bar1 in configuration file, to use 
"example.log" file.  But, may not be possible in practical situation. 
 If I have to specify that all the classes beneath child package need to 
be logged into example.log file how could I achieve it?










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

Reply via email to