2009-06-17 5 views
6

Dans log4j, existe-t-il un moyen pour que logger.error ("") et logger.debug ("") incluent des dispositions de sortie différentes? Je souhaite que les erreurs incluent les noms de méthodes et les numéros de ligne, ce qui ralentit les performances de l'application.Disposition log4j différente pour le débogage et l'erreur?

EDIT:

Après avoir ajouté apache-log4j-extras, le fichier de configuration suivant fonctionne.

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

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> 

    <appender name="WARNINGS" class="org.apache.log4j.DailyRollingFileAppender"> 
     <param name="File" value="warnings.log"/> 
     <param name="DatePattern" value="'.'yyyy-MM-dd"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss} %-5p %c - %m%n%n"/> 
     </layout> 
     <filter class="org.apache.log4j.filter.LevelRangeFilter"> 
      <param name="LevelMin" value="DEBUG"/> 
      <param name="LevelMax" value="WARN"/> 
     </filter> 
    </appender> 

    <appender name="ERRORS" class="org.apache.log4j.DailyRollingFileAppender"> 
     <param name="File" value="errors.log"/> 
     <param name="DatePattern" value="'.'yyyy-MM-dd"/> 
     <layout class="org.apache.log4j.PatternLayout"> 
      <!-- %M for method name , %L for line number --> 
      <param name="ConversionPattern" value="%d{yyyy-MMM-dd HH:mm:ss} %-5p %c %M %L - %m%n%n"/> 
     </layout> 
     <filter class="org.apache.log4j.filter.LevelRangeFilter"> 
      <param name="LevelMin" value="ERROR"/> 
      <param name="LevelMax" value="FATAL"/> 
     </filter> 
    </appender> 

    <logger name="com.foo.bar"> 
     <appender-ref ref="WARNINGS"/> 
     <appender-ref ref="ERRORS"/> 
    </logger> 

</log4j:configuration> 

Ce code a été utilisé pour tester

// goes to errors.txt 
    log.error("error"); 
//goes to warnings.txt 
    log.warn("warn"); 
+1

Dans votre ConversionPattern, vous pouvez utiliser% d {ISO8601} c'est un formateur de temps optimisé que log4j fournit pour des raisons de commodité et de rapidité. – Gandalf

+0

@Gandalf merci. J'essaierai. – sal

Répondre

9

Dans votre configuration log4j.xml, vous pouvez créer deux appenders, chacun utilisant un LevelMatchFilter et chacun avec une sortie de modèle séparée.

+0

J'aime ça. Y a-t-il un exemple que vous pouvez me montrer? – sal

+0

Le lien LevelMatchFilter ne fonctionne plus – Kairan

1

Je voudrais simplement construire deux différents enregistreurs. Un appelé ERROR et un appelé DEBUG. Ensuite, vous pouvez facilement configurer différentes mises en page de sortie et appeler uniquement ERROR.error ou DEBUG.debug.

+3

Mauvais conseil. Les utilisateurs sans méfiance pourraient suivre votre conseil, ce qui serait assez regrettable. – Ceki

+0

Si vous le sentez, dites-moi pourquoi - ne dites pas aveuglément que quelque chose est un mauvais conseil sans donner de meilleurs conseils. Pourquoi serait-ce malheureux? – Gandalf

+0

Le meilleur conseil était déjà donné par "Alex B". L'appel ERROR.error ou DEBUG.debug est assez bête. Lisez la documentation sur log4j ou obtenez un indice. – Ceki

Questions connexes