2017-11-01 1 views
1
import org.apache.log4j.*; 

public class LoggingInJava { 

    public static void main(String[] args) { 
     PropertyConfigurator.configure("mylog4j1.properties"); 
     myLogger.info("1"); 
     PropertyConfigurator.configure("mylog4j2.properties"); 
     myLogger2.info("2"); 

     myLogger.info("3"); 
    } 
} 

Ich bin Anfänger in der Protokollierung.Verschiedene Logger mit verschiedenen Konfigurationen Log4j

Ich habe zwei verschiedene Eigenschaften-Dateien - mylog4j1.properties hat fileappender, der zu file1 und mylog4j2.properties hat fileAppender, der zu file2 ausgibt.

Ich möchte, dass myLogger1 mit mylog4j1 Konfigurationen und ähnliche für nächste arbeiten.

Aber wenn ich meinen Code wie oben schreibe, bekomme ich nicht erwartetes Ergebnis.

Erwartetes Ergebnis:

file1: 1 3
file2: 2

Tatsächliches Ergebnis:

file1: 1 file2: 2 3

Ich habe versucht, aus anderen Fragen von stackoverflow zu lernen, aber selbst dann konnte ich es nicht herausfinden.

Bitte helfen Sie mir, meinen Fehler zu finden, oder ob ich konzeptionelle Fehler in Log4j Framework mache.

Antwort

0

Der unten stehende Code funktioniert einwandfrei und er nimmt log4j aus zwei verschiedenen Eigenschaftendateien "mylog4j1.properties" und "mylog4j2.properties" und die Ausgabe wird in zwei Ausgabedateien "file1.log" und "file2.log" generiert "mit der gewünschten Ausgabe.

import org.apache.log4j.*; 

    public class LoggingInJava { 

     static final Logger myLogger1 = Logger.getLogger("mylog4j1"); 
     static final Logger myLogger2 = Logger.getLogger("mylog4j2"); 

     public static void main(String[] args) { 
      PropertyConfigurator.configure("mylog4j1.properties"); 
      myLogger1.info("1"); 
      PropertyConfigurator.configure("mylog4j2.properties"); 
      myLogger2.info("2"); 

      myLogger1.info("3"); 
     } 
    } 

mylog4j1.properties 
-------------------- 
log4j.rootLogger=OFF 

log4j.appender.myLogger1=org.apache.log4j.FileAppender 
log4j.appender.myLogger1.File=logs/file1.log 
log4j.appender.myLogger1.layout=org.apache.log4j.PatternLayout 
log4j.appender.myLogger1.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 

log4j.category.mylog4j1=TRACE, myLogger1 
log4j.additivity.mylog4j1=false 


mylog4j2.properties 
-------------------- 
log4j.rootLogger=OFF 

log4j.appender.myLogger2=org.apache.log4j.FileAppender 
log4j.appender.myLogger2.File=logs/file2.log 
log4j.appender.myLogger2.layout=org.apache.log4j.PatternLayout 
log4j.appender.myLogger2.layout.ConversionPattern=%d [%24F:%t:%L] - %m%n 

log4j.category.mylog4j2=TRACE, myLogger2 
log4j.additivity.mylog4j2=false 
+0

Danke, ich glaube, ich habe ein besseres Verständnis der Konfiguration von log4j. Ich habe nur einen weiteren Zweifel: Ist PropertyConfigurator() benötigt, weil Sie Logger in Eigenschaften in sich selbst definiert? – Harish

0

Warum verwenden Sie zwei properties Dateien? Sie können dies aus einer Eigenschaftendatei tun. Hier

ist die Probe, wie zu implementieren, dass

# Direct log messages to a log file 
log4j.appender.FILE=org.apache.log4j.RollingFileAppender 
log4j.appender.FILE.File=/home/logs/firstLog.log 
log4j.appender.FILE.MaxFileSize=1MB 
log4j.appender.FILE.MaxBackupIndex=1 
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout 
log4j.appender.FILE.Append=true 
log4j.appender.FILE.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}] %m%n 

log4j.appender.SECOND=org.apache.log4j.RollingFileAppender 
log4j.appender.SECOND.File=/home/logs/secondLog.log 
log4j.appender.SECOND.MaxFileSize=1MB 
log4j.appender.SECOND.MaxBackupIndex=1 
log4j.appender.SECOND.layout=org.apache.log4j.PatternLayout 
log4j.appender.SECOND.Append=true 
log4j.appender.SECOND.layout.ConversionPattern=%d{ABSOLUTE} %-5p [%c{1}] %m%n 

# Root logger option 
log4j.rootLogger=TRACE, FILE 

log4j.category.testngLogger=DEBUG, SECOND 
log4j.additivity.testngLogger=false 
+1

Danke. Ich habe etwas Neues gelernt. – Harish

+0

Wissen Sie, wie die Appender Parameter aus der Eigenschaftendatei erhalten? – Harish

+0

Ich verstehe einfach nicht, wie log4j von innen mit Eigenschaften arbeitet. Wie die Ausgabe von Dateiname aus der .File-Eigenschaft konfiguriert wird, kann ich die setFile() -Methode sehen, aber wie setFile() sein Argument bekommt ?? – Harish

Verwandte Themen