takidoso
Erfahrenes Mitglied
Hallo und Halli,
ich verwende ein API welches mit dem log4j loggt. so weit so gut. Ich habe einiges gelesen darüber doch irgendwie kommt mir das Verhalten des Loggers merkwürdig vor, oder irgendwas mache ich falsch...
Ich habe das ganze mit einer Property-Datei konfigurriert und verschiedene Einstellungen auprobiert.
Ich habe meine zu loggene Klasse so wi es sich wohl gehört
mit
versehen.
Genauso passiert es auch in den verschiedenen Klassen des verwendeten APIs
Maine main-methode nimmt die Konfiguartion vor mittels
Ich hätte nun eigetnlich angenommen, dass meine Klasse und das API sich bezüglich selben verwendeten Properties würden sich die Ausgaben beider (der des APIs als auch meine) identisch verhalten, aber Pustekuchen, und ich weiß wirklich nicht was ich übersehen haben könnte.
eine meiner Varianten von log4.properties sieht wie folgt aus und zeigt das eigetnlich recht demonstrativ:
Die herauspurzelnden logs zeigen hier komischerweise nur die des APIs (ich selbst habe in meiner Klasse ein debug gemacht") kommt wohl nicht raus weil rootLogger auf off steht.
aber warum kommt bitte dann was für das API raus (von WARN, INFO bis DBUG)? :suspekt:
eine andere Variante ist
Ergebnis:
wie erwartet wird alles doppelt ausgegeben jede Zeile in dem einen als auch in dem anderen Apender-Format
Aber für meine Klasse immer noch nix zu sehen!
Nun ändere ich mal als Spaß die Level in der routlogger angabe:
und siehe da ich bekomem einen Eintrag anstelle eines weiteren wie es in der API-Klasse der Fall ist
hier die Ausgabe:
DEBUG ?:? consumeBlock() blockId: -1
2006-11-10 15:07:05,051 DEBUG ?:? consumeBlock() blockId: -1
INFO ?:? consumeBlock() Unidentified block for buffer: "" you can safelfy ignore this if it is blank or empty, eg: no data
2006-11-10 15:07:05,051 INFO ?:? consumeBlock() Unidentified block for buffer: "" you can safelfy ignore this if it is blank or empty, eg: no data
2006-11-10 15:07:05,051 DEBUG SwiftSplitter.java:231 main() Fertig
hier wird offenbar nur der Apender von LALA für meine Klasse gesehen.
Anstelle dass auch das Format von CONSOLE einen 2. Eintag veranlasst.
;-] ich schließe mal harscharf, dass irgendwas im verwendeten API doch noch anders ist als ich bisher bemerkt habe. Doch wo nach muss ich da suchen? Und wie bekomme ich meine Loggerverwendung auch so autark vom rootLogger hinbekomme wie das in dme API
kann mir jemand mit mehr lg4j erfahrung einen Tipp geben?
mit bestem Dank im Voraus
Takidoso
ich verwende ein API welches mit dem log4j loggt. so weit so gut. Ich habe einiges gelesen darüber doch irgendwie kommt mir das Verhalten des Loggers merkwürdig vor, oder irgendwas mache ich falsch...
Ich habe das ganze mit einer Property-Datei konfigurriert und verschiedene Einstellungen auprobiert.
Ich habe meine zu loggene Klasse so wi es sich wohl gehört
mit
Code:
static Logger logger = Logger.getLogger(SwiftSplitter.class);
Genauso passiert es auch in den verschiedenen Klassen des verwendeten APIs
Maine main-methode nimmt die Konfiguartion vor mittels
HTML:
PropertyConfigurator.configure("log4.propteries");
Ich hätte nun eigetnlich angenommen, dass meine Klasse und das API sich bezüglich selben verwendeten Properties würden sich die Ausgaben beider (der des APIs als auch meine) identisch verhalten, aber Pustekuchen, und ich weiß wirklich nicht was ich übersehen haben könnte.
eine meiner Varianten von log4.properties sieht wie folgt aus und zeigt das eigetnlich recht demonstrativ:
Code:
log4j.rootLogger=OFF, LALA
log4j.de.tai.swiftsplitting.SwiftSplitter = DEBUG
log4j.logger.net.sourceforge.wife.swift.SwiftParser2 = DEBUG
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %-5p %F:%L %M() %m %n
log4j.appender.LALA=org.apache.log4j.ConsoleAppender
log4j.appender.LALA.layout=org.apache.log4j.PatternLayout
log4j.appender.LALA.layout.ConversionPattern = %d{ISO8601} %-5p %F:%L %M() %m %n
aber warum kommt bitte dann was für das API raus (von WARN, INFO bis DBUG)? :suspekt:
eine andere Variante ist
Code:
log4j.rootLogger=OFF, LALA
log4j.de.tai.swiftsplitting.SwiftSplitter = DEBUG, CONSOLE
log4j.logger.net.sourceforge.wife.swift.SwiftParser2 = DEBUG, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %-5p %F:%L %M() %m %n
log4j.appender.LALA=org.apache.log4j.ConsoleAppender
log4j.appender.LALA.layout=org.apache.log4j.PatternLayout
log4j.appender.LALA.layout.ConversionPattern = %d{ISO8601} %-5p %F:%L %M() %m %n
wie erwartet wird alles doppelt ausgegeben jede Zeile in dem einen als auch in dem anderen Apender-Format
Aber für meine Klasse immer noch nix zu sehen!
Nun ändere ich mal als Spaß die Level in der routlogger angabe:
Code:
log4j.rootLogger=DEBUG, LALA
log4j.de.tai.swiftsplitting.SwiftSplitter = DEBUG, CONSOLE
log4j.logger.net.sourceforge.wife.swift.SwiftParser2 = DEBUG, CONSOLE
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %-5p %F:%L %M() %m %n
log4j.appender.LALA=org.apache.log4j.ConsoleAppender
log4j.appender.LALA.layout=org.apache.log4j.PatternLayout
log4j.appender.LALA.layout.ConversionPattern = %d{ISO8601} %-5p %F:%L %M() %m %n
und siehe da ich bekomem einen Eintrag anstelle eines weiteren wie es in der API-Klasse der Fall ist
hier die Ausgabe:
DEBUG ?:? consumeBlock() blockId: -1
2006-11-10 15:07:05,051 DEBUG ?:? consumeBlock() blockId: -1
INFO ?:? consumeBlock() Unidentified block for buffer: "" you can safelfy ignore this if it is blank or empty, eg: no data
2006-11-10 15:07:05,051 INFO ?:? consumeBlock() Unidentified block for buffer: "" you can safelfy ignore this if it is blank or empty, eg: no data
2006-11-10 15:07:05,051 DEBUG SwiftSplitter.java:231 main() Fertig
hier wird offenbar nur der Apender von LALA für meine Klasse gesehen.
Anstelle dass auch das Format von CONSOLE einen 2. Eintag veranlasst.
;-] ich schließe mal harscharf, dass irgendwas im verwendeten API doch noch anders ist als ich bisher bemerkt habe. Doch wo nach muss ich da suchen? Und wie bekomme ich meine Loggerverwendung auch so autark vom rootLogger hinbekomme wie das in dme API
kann mir jemand mit mehr lg4j erfahrung einen Tipp geben?
mit bestem Dank im Voraus
Takidoso