web-dev-qa-db-fra.com

seuil et catégorie de l'appendice log4j

Permettez-moi de préfacer cette question en disant que j'ai épuisé Google, ou du moins ce que j'ai essayé de rechercher. "seuil log4j", "catégorie seuil log4j", "catégorie seuil appender log4j", etc. Mais je ne comprends vraiment pas les résultats que je reçois de Google.

Voici la configuration complète qui m'a été donnée. Je ne sais pas comment le modifier pour l'adapter à mes besoins.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<!-- ===================================================================== -->
<!--                                                                       -->
<!--  Log4j Configuration                                                  -->
<!--                                                                       -->
<!-- ===================================================================== -->

<!-- $Id: jboss-log4j.xml 62403 2007-04-18 15:26:43Z [email protected] $ -->

<!--
| For more configuration infromation and examples see the Jakarta Log4j
| owebsite: http://jakarta.Apache.org/log4j
 -->

<log4j:configuration xmlns:log4j="http://jakarta.Apache.org/log4j/" debug="false">

<!-- ================================= -->
<!-- Preserve messages in a local file -->
<!-- ================================= -->

<appender name="FILE" class="org.jboss.logging.appender.DailyRollingFileAppender">
  <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
  <param name="File" value="${jboss.server.log.dir}/server.log"/>
  <param name="Append" value="false"/>

  <!-- Rollover at midnight each day -->
  <param name="DatePattern" value="'.'yyyy-MM-dd"/>

  <layout class="org.Apache.log4j.PatternLayout">
     <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
  </layout>
</appender>


<!-- ============================== -->
<!-- Append messages to the console -->
<!-- ============================== -->

<appender name="CONSOLE" class="org.Apache.log4j.ConsoleAppender">
  <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
  <param name="Target" value="System.out"/>
  <param name="Threshold" value="DEBUG"/>

  <layout class="org.Apache.log4j.PatternLayout">
     <!-- The default pattern: Date Priority [Category] Message\n -->
     <param name="ConversionPattern" value="%d{ABSOLUTE} %-5p [%c] %m%n"/>
  </layout>
</appender>



<!-- ================ -->
<!-- Limit categories -->
<!-- ================ -->

<category name="com.arjuna">
  <priority value="FATAL"/>
</category>   

<category name="com.Sun.facelets">
  <priority value="ERROR"/>
</category>   

 <category name="jacorb">
   <priority value="FATAL"/>
 </category>

<category name="javax.enterprise.resource">
  <priority value="WARNING"/>
 </category>  

 <category name="javax.enterprise.resource.webcontainer.jsf">
    <priority value="WARNING"/>
 </category>  

 <category name="org.Apache">
    <priority value="FATAL"/>
 </category>

 <category name="org.hibernate">
    <priority value="FATAL"/>
 </category>   

 <category name="org.jboss">
    <priority value="INFO"/>
 </category>

<category name="org.jboss.ejb3.EJB3Deployer">
    <priority value="WARNING" />
</category>

<category name="org.jboss.ejb3.JmxKernelAbstraction">
    <priority value="WARNING" />
</category>

<category name="org.jboss.management">
   <priority value="FATAL"/>
</category>

<category name="org.jboss.serial">
  <priority value="FATAL"/>
</category>

<category name="org.jboss.wsf.framework">
   <priority value="FATAL"/>
</category>   

<category name="org.jgroups">
   <priority value="FATAL"/>
</category>

<category name="org.quartz">
    <priority value="FATAL" />
</category>
<!-- ======================= -->
<!-- Setup the Root category -->
<!-- ======================= -->

<root>
   <appender-ref ref="CONSOLE"/>
   <appender-ref ref="FILE"/>
</root>



</log4j:configuration>

Je ne comprends pas comment le niveau "seuil" de l'appendice interagit avec les catégories. Voir, je veux seulement que les messages com.foo.bar s'affichent sur la console. Mais il semble que j'obtiens beaucoup plus que cela, par exemple, org.jboss.wsf.framework vide les messages DEBUG, même si j'ai une catégorie avec un nom qui lui correspond et définie sur FATAL.

Je suis certain que je manipule le bon fichier de configuration, car jboss rapporte qu'il recharge la configuration après l'avoir modifiée. Alors, comment puis-je définir correctement les niveaux de catégorie/seuil? Quelle est la différence entre le seuil et la catégorie?

Exemple de sortie (coupé). Pourquoi le quartz apparaît-il sur la console lorsque je l'ai réglé sur FATAL?

2009-06-22 00:58:37,666 INFO  [org.quartz.plugins.history.LoggingJobHistoryPlugin] Job JobInitializationPlugin.JobInitializationPlugin_jobInitializer execution complete at  00:58:37 06/22/2009 and reports: null
2009-06-22 01:08:37,669 DEBUG [org.quartz.simpl.SimpleJobFactory] Producing instance of Job 'JobInitializationPlugin.JobInitializationPlugin_jobInitializer', class=org.quartz.jobs.FileScanJob
2009-06-23 15:44:17,790 INFO  [org.jboss.wsf.stack.jbws.NativeServerConfig] 3.0.5.GA
2009-06-23 15:44:17,868 DEBUG [org.jboss.wsf.framework.deployment.DeploymentAspectManagerImpl] setDeploymentAspects on WSDeploymentAspectManagerEJB
2009-06-23 15:44:17,868 DEBUG [org.jboss.wsf.framework.deployment.DeploymentAspectManagerImpl] setDeploymentAspects on WSDeploymentAspectManagerEndpointAPI
24
Amy

Pour répondre à la question spécifique de savoir pourquoi Quartz apparaît sur la journalisation, vous devez modifier la configuration de Quartz comme suit:

 <category name="org.quartz" additivity="false">
    <priority value="FATAL" />
 </category>

L'attribut d'additivité indique à log4j de remplacer le paramètre racine et de l'utiliser uniquement pour org.quartz.

Dans une version précédente de la question, vous avez déclaré que vous vouliez uniquement que les messages de ces classes soient activés, pour cela, vous devez commencer par configurer la priorité de l'élément racine sur fatal (ou même NO), puis il n'enregistrera que ces packages./classes que vous activez explicitement.

Pour répondre à votre question sur la façon dont le seuil interagit avec la catégorie, pensez-y essentiellement comme une publication/abonnement. La catégorie définit ce qui est publié par l'enregistreur, le seuil définit le niveau d'abonnement de l'appender.

C'est un peu compliqué du fait que la catégorie n'est pas une chose unique, mais plutôt une hiérarchie, donc le fait que vous définissez le niveau de publication sur une catégorie n'est pas toute l'histoire. Il peut être remplacé dans la hiérarchie, comme c'était le cas dans votre cas.

25
Yishai

Déplacez "<appender-ref ref =" CONSOLE "/>" de <root> vers <category name = "com.foo.bar">.

C'est à dire.:

<category name="com.foo.bar">
  <priority value="DEBUG"/>
  <appender-ref ref="CONSOLE"/>
</category>   

<root>
  <appender-ref ref="FILE"/>
</root>

Avec la configuration que vous montrez, la console ne devrait pas recevoir de messages de débogage, vérifiez donc si une autre configuration peut être utilisée ou si du code modifie la configuration par programmation.

4