Je veux configurer log4j pour que tous les messages de journal produits à partir des classes sous le package com.foo.bar vont à bar.log, et tous les messages de journal produits à partir des classes sous le paquet com.bar.blatz vont à blatz.log.
Ceci est basé sur mon réponse à une question similaire:
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.Apache.org/log4j/">
<!-- 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>
Si vous ajoutez un appender-ref à l'élément racine, il recevra également des messages com.foo.bar, etc. Vous pouvez arrêter cela en spécifiant 'additivity = "false"' sur les enregistreurs.