Frage
Ist es möglich, dass Log4J den vollständigen Pfad der für die Konfiguration verwendeten Datei anzeigt?
Hintergrund
Ich habe eine Hassliebe zu log4j. In guten Zeiten ist es großartig, aber wenn es nicht funktioniert, kann es eines der schwierigsten Dinge sein, Fehler zu beheben. Ich verwalte die gesamte Protokollierung in unserer Anwendung. Daher bin ich mit der Protokollierung und dem im Handbuch definierten Standardinitialisierungsverfahren sehr vertraut . Trotzdem scheint es, dass alle paar Wochen die Protokollierungspausen und ich viel Zeit damit verbringen , das Problem zu lösen.
Dieses Mal ist es schwer gebrochen. Jede einzelne Protokollanweisung wird überall auf der Konsole gespeichert, und ich kann nicht herausfinden, warum. Die gleiche exakte Codebasis, die letzte Woche meine log4j.xml-Dateien verwendet hat, verwendet plötzlich eine andere Konfiguration. Nichts Offensichtliches hat sich geändert. Meine einzige Vermutung ist, dass sich einige Abhängigkeiten geändert haben und ich vermute, dass Maven eine böse JAR heruntergeladen hat, die alles kaputt macht.
Wenn ich nur herausfinden könnte, welche Konfigurationsdatei Log4J beim Start verwenden soll , könnte ich dieses und die meisten anderen Probleme leicht lösen.
Zusammenfassung
Gibt es eine Möglichkeit, Log4J anzuweisen, die für die Konfiguration verwendete Datei zu drucken? Gibt es alternativ eine Möglichkeit, eine laufende Anwendung zu brechen und den Debugger zu verwenden, um diese Frage zu beantworten (möglicherweise mit einem Ausdruck oder durch Überprüfen von Variablen)?
Antworten:
Ja, fügen Sie einfach
log4j.debug
die JVM-Systemvariablen hinzu. Zum Beispiel:Log4j gibt dann Folgendes aus:
Referenz finden Sie im Handbuch und in den FAQ .
quelle
Ich verwende Log4J2 und wenn Sie die Datei aus Ihrem Java-Programm heraus erhalten möchten, hat dies für mich funktioniert:
LoggerContext lContect = LogManager.getContext(); Field f = lContect.getClass().getDeclaredField("configuration"); f.setAccessible(true); XmlConfiguration iWantThis = (XmlConfiguration) f.get(lContect); System.out.println("Config File: " + iWantThis.getName());
quelle
Das log4j 2-Äquivalent hierfür ist
<Configuration status="trace">
in der Konfigurationsdatei festzulegen. Dies zeigt den Speicherort an, von dem aus die log4j2-Konfigurationsdatei geladen wird, sowie andere interne Details des log4j2-Konfigurationsprozesses. Standardmäßig lautet die Statusprotokollierungsstufe WARN, sodass Sie nur dann Benachrichtigungen sehen, wenn ein Problem vorliegt.Wenn die Konfigurationsdatei nicht korrekt gefunden wird, können Sie die interne Statusprotokollierung von log4j2 weiterhin aktivieren, indem Sie die Systemeigenschaft
org.apache.logging.log4j.simplelog.StatusLogger.level
auf setzenTRACE
.quelle