tags:

views:

1045

answers:

1

Hi

I want to set up log4j so that all log meessages produced from classes under package com.foo.bar go to bar.log, and all the log meessages produced from classes under package com.bar.blatz go to blatz.log. How do I do this _using_log4j.xml? I know its possible using property files, but how do I do it using the XML configuration?

+1  A: 

This is based on my answer to a similar question:

<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"&gt;
 <!-- general application log -->
 <appender name="BarLogFile" class="org.apache.log4j.FileAppender">
  <param name="File" value="bar.log" />
  <param name="Threshold" value="INFO" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
  </layout>
 </appender> 
 <!-- additional fooSystem logging -->
 <appender name="BlatzLogFile" class="org.apache.log4j.FileAppender">
  <param name="File" value="blatz.log" />
  <layout class="org.apache.log4j.PatternLayout">
   <param name="ConversionPattern" value="%-5p %t [%-40.40c] %x - %m%n"/>
  </layout>
 </appender>
 <logger name="com.foo.bar">
  <appender-ref ref="BarLogFile"/>
 </logger>
 <logger name="com.bar.blatz">
  <appender-ref ref="BlatzLogFile"/>
 </logger>
 <root>
  <level value="INFO"/>
  <!-- no appender, output will be swallowed (I think) -->
 </root>
</log4j:configuration>

If you add an appender-ref to the root element, it will also receive com.foo.bar etc messages. You can stop that by specifying 'additivity="false"' on the loggers.

araqnid