2016-04-06 4 views
1

Ich möchte meine log4j.xml-Datei zum Protokollieren bestimmter Klassen/Pakete auf DEBUG-Ebene und den Rest auf Fehler-Ebene einrichten.Verwenden Sie log4j.xml, protokollieren bestimmte Datei oder Paket bei Debug alles andere bei Fehler

Wie Sie unten sehen können, habe ich die Protokollierungsstufe zu Info für gov.xxxx.app.batch.thread und gov.xxxx.app.batch.sms.DoWork zu info aktualisiert.

Es sieht jedoch so aus, als hätte die threshold Vorrang (was Sinn macht). Gibt es eine Möglichkeit, es so zu machen, dass die Konfiguration der Klasse/Paket-Ebene Vorrang vor dem Schwellenwert hat? Oder ein anderer Ansatz, der das gewünschte Ergebnis bringen würde?

log4j.xml:

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

     <appender name="console" class="org.apache.log4j.ConsoleAppender"> 
       <param name="threshold" value="all"/> 
       <layout class="org.apache.log4j.PatternLayout"> 
         <param name="conversionPattern" value="%d %p %c %L - %m%n"/> 
       </layout> 
     </appender> 

     <appender name="logFile" class="org.apache.log4j.DailyRollingFileAppender"> 
       <param name="file" value="${app.batchdriver.home}/logs/${app.batchdriver.log.name}"/> 
       <param name="maxFileSize" value="5MB"/> 
       <param name="maxBackupIndex" value="20"/> 
       <param name="threshold" value="error"/> 

       <layout class="org.apache.log4j.PatternLayout"> 
         <param name="conversionPattern" value="%d %p %c %L - %m%n"/> 
       </layout> 
     </appender> 

     <!-- Logger for Batch classes --> 
     <logger name="gov.xxxx.app"> 
       <level value="error"/> 
     </logger> 

     <!-- Logger for Spring classes --> 
     <logger name="org.springframework"> 
       <level value="error"/> 
     </logger> 

     <!-- Logger for Hibernate classes --> 
     <logger name="org.hibernate"> 
       <level value="error"/> 
     </logger> 

     <!-- Logger for Apache classes --> 
     <logger name="org.apache"> 
       <level value="error"/> 
     </logger> 

     <!-- Logger for Apache classes --> 
     <logger name="net.sf"> 
       <level value="error"/> 
     </logger> 

     <!-- Logger for testing Performance --> 
     <logger name="gov.xxxx.app.batch.thread"> 
       <level value="info"/> 
     </logger> 
     <logger name="gov.xxxx.app.batch.sms.DoWork"> 
       <level value="info"/> 
     </logger> 
     <root> 
       <priority value ="all" /> 
       <appender-ref ref="console"/> 
       <appender-ref ref="logFile"/> 
     </root> 

</log4j:configuration> 

Antwort

0

Wenn ich Ihre Anforderungen richtig verstehen Sie protokollieren möchten:

  1. alles
  2. Fehler logFile + INFO Protokolle von bestimmten Paketen zu trösten

Wenn das der Fall ist Sie müssen folgendes tun:

  1. entfernen Schwelle (oder machen es INFO) auf logFile appender
  2. <appender-ref ref="logFile"/> von root-Logger entfernen, da root-Logger "all" gibt an, und Sie wollen nicht, dass
  3. alle hinzufügen Logger, die Sie in Logfile sehen wollen
+0

Nein, ich möchte alle Fehler auf beiden protokollieren. Und ich möchte Info für beide genau dann und nur dann protokollieren, wenn es dem Paket oder dem Dateinamen entspricht. – ScrappyDev

+0

dann ändern Ebene auf Root-Logger und Schwellenwert auf LogFile Appender zu INFO – hoaz

+0

OK, also root = Fehler, Klasse/Paket = INFO, Schwelle = INFO? – ScrappyDev