2 votes

log4j : priorité de catégorie différente du seuil de l'appender

J'ai essayé de faire fonctionner ce cas d'utilisation simple mais je n'y arrive pas : Définir un seuil par défaut de INFO sur un FILE Appender, mais définir une catégorie avec le niveau DEBUG. Il s'agit d'un fichier jboss 4.2.1.GA log4j.xml que j'utilise et dans lequel je veux juste enregistrer les appels java.sql.

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

      <param name="DatePattern" value="'.'yyyy-MM-dd"/>

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

  <category name="java.sql">
    <priority value="DEBUG"/>
    <appender-ref ref="SQL_FILE"/>
  </category>

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

Au lieu d'enregistrer uniquement java.sql, il enregistre INFO et plus et n'inclut aucune information java.sql. S'il n'y a pas de solution facile, il ne me reste plus qu'à régler le seuil de l'appender sur DEBUG et à désactiver toute journalisation pour les multiples catégories qui sont incluses, ce qui semble une perte de temps.

J'ai essayé ce qui suit mais je n'ai pas réussi à le faire fonctionner : Configurer plusieurs fichiers journaux dans log4j en utilisant des catégories .

1voto

Terry Burgess Points 11

J'ai rapidement trouvé la solution. En gros, le cas d'utilisation est décrit dans le wiki jboss ici : http://docs.jboss.org/process-guide/en/html/logging.html Section 10.3.5 Redirection de la sortie de la catégorie . Cet article de blog a également été utile : ptth://ourcraft.wordpress.com/2008/10/23/customizing-log4j-logging-on-jboss/#comment-796.

En fin de compte, voici ce que j'ai utilisé et qui a fonctionné :

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

      <param name="DatePattern" value="'.'yyyy-MM-dd"/>

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

   </appender>

<category name="java.sql.Connection"  additivity="false">
    <priority value="DEBUG"/>
    <appender-ref ref="SQL_FILE"/>
</category>  

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

Notez que vous ne voulez pas définir l'appender SQL_FILE dans Root ; pour une raison quelconque. C'était le dernier élément.

0voto

Matt Solnit Points 13528

A ma connaissance, les classes de la java.sql ne font pas réellement de journalisation, et ils définitivement ne pas écrire dans log4j (ou même dans commons-logging).

Toutefois, pour théorique Voici comment vous résoudriez ce problème s'il s'agissait d'un autre paquet (et si commons-logging était réellement utilisé) :

  1. Retirez le seuil de la SQL_FILE appender.
  2. Ajoutez la ligne : <priority value="INFO"/> a la <root/> (avant l'élément appender-ref ).
  3. Sauvegardez et redémarrez JBoss.

Enfin, notez que pour certains problèmes JDBC, l'option DriverManager.setLogWriter peut être utile (voir http://java.sun.com/products/jdbc/reference/faqs/index.html#4 ).

EDIT : Puisque vous avez indiqué que vous êtes réellement intéressé par l'enregistrement de la sortie iBatis, vous devriez simplement modifier les éléments suivants <category name="java.sql"> a <category name="com.ibatis"> .

0voto

Jeff Points 1

Une étape supplémentaire nécessaire pour JBoss 4.2.1.GA est de supprimer tout fichier jar log4j de la guerre. Si ce fichier jar est inclus dans votre war, le fichier sql.log n'est jamais écrit.

Exemple d'entrée maven pom.xml :

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.13</version>
    <scope>provided</scope>
</dependency>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X