4 Stimmen

Überschreiben von log4j-Einstellungen zur Bereitstellungszeit

Für eine Anwendung, die auf einer großen Anzahl von Maschinen bereitgestellt wird, habe ich die Entscheidung getroffen, eine standardmäßige log4j.xml-Datei mit dem Anwendungs-Paket zu bereitstellen, nur um sicherzustellen, dass die gleichen Einstellungen überall vorhanden sind: Appender, Kategorien, Levels.

Das hat den Nachteil, dass wir bei lokaler Änderung der Levels riskieren, die Änderungen beim Neubereitstellen zu verlieren oder mit alten Einstellungen zu leben. In der Praxis müssen wir in der Regel nur die Logger-Levels ändern, meistens eines davon, daher suche ich nach einer Lösung, die es mir ermöglicht, nur die Levels pro Installation zu überschreiben.

Wie kann ich die log4j-Levels überschreiben, ohne die Originaldatei log4j.xml zu ändern?

2voto

matt b Punkte 135206

Setzen Sie die Umgebungsvariable log4j.configuration so, dass sie auf eine externe Datei zeigt. Auf diese Weise wird die externe Datei nicht berührt oder geändert, wenn Sie neu bereitstellen, und somit geht Ihre Konfiguration nicht verloren.

Zur Referenz siehe den Abschnitt Default Initialization Procedure im log4j Handbuch.

1voto

Trevor Tippins Punkte 2807

Wenn Sie weiterhin eine gemeinsame Hauptkonfiguration haben möchten, könnten Sie darüber nachdenken, der Anwendung etwas hinzuzufügen, das es ermöglicht, die Log4J-Logger-Ebenen nach der Initialisierung zu ändern. Sie könnten diese Änderungen entweder über JMX aufrufen, die Überschreibungen aus einer zentralen Quelle beziehen oder einfach durch regelmäßiges Lesen einer installationspezifischen Überschreibungsdatei (falls vorhanden), je nachdem, welche Infrastrukturunterstützung Ihre Anwendung nutzen kann.

Schauen Sie sich dazu diese Seite für weitere Informationen an:

1voto

Dima Punkte 3968

Früher habe ich solche Probleme gelöst, indem ich eine weitere Indirektion in der log4j-Eigenschaftsdatei eingeführt habe. Zum Beispiel so etwas angeben:

log4j.appender.CONSOLE.Threshold = %level%.

Zur Laufzeit habe ich zuerst die Platzhalter im Speicher ersetzt oder Standardwerte eingefügt. Auf diese Weise hat sich die log4j-Konfiguration nie geändert, egal bei welchem Deployment - sei es bei Entwicklern, QA oder sogar in der Produktion. Jedes Ziel hatte seinen Hauptkonfigurationssatz, darunter auch %Platzhalter% für das Level. Diese Parameter würden entweder mit dem Installer geliefert werden oder jeder Benutzer würde die Hauptkonfiguration beiseite behalten, während er die neue Version einsetzt. Aber die log4j-Konfiguration ändert sich nie und niemand kümmert sich darum, außer den Entwicklern, die direkt damit arbeiten.

Vielleicht ist meine Erklärung etwas zu kompliziert... betrachten Sie es einfach als einen Spring PropertyPlaceholderConfigurer und wenden Sie es auf die log4j-Konfiguration an :)

Es ist ein wenig Codierung, aber wirklich einfach und löst viele Probleme auf lange Sicht.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X