So legen Sie eine Logback-Konfiguration als Klassenpfadressource und nicht als Datei fest

9

Ich habe die folgende Situation. Ich muss in der Lage sein, zwei Programme auszuführen, die von verschiedenen Batch-Dateien gestartet werden, wobei jede Batch-Datei eine Java-Klasse mit main () aus demselben Jar aufruft. Ich möchte, dass jedes Programm sein eigenes Protokoll hat. Das zweite Programm ist jedoch ein Installer für das erste, und deshalb möchte / kann ich -Dlogback.configurationFile = / pfad / zu / config-Datei nicht einfach angeben, da dieser Ort möglicherweise noch nicht existiert.

>

Logback-Dokumentation scheint eine Lösung zu bieten , aber ich brauche ein Beispiel, wie es funktioniert:

  

Angabe des Speicherorts der Standardkonfigurationsdatei als System   Eigenschaft

     

Wenn Sie möchten, können Sie den Speicherort der Standardkonfiguration angeben   Datei mit einer Systemeigenschaft namens logback.configurationFile. Der Wert   Diese Eigenschaft kann eine URL, eine Ressource im Klassenpfad oder ein Pfad sein   in eine Datei außerhalb der Anwendung.

     

java -Dlogback.configurationFile = / Pfad / zu / config.xml   chapters.configuration.MyApp1

Kann jemand mich auf ein Beispiel verweisen, in dem logback.configurationFile als Ressource im Klassenpfad definiert ist, im Gegensatz zum Dateisystem?

    
Steve Cohen 25.10.2012, 13:59
quelle

3 Antworten

10

Sie können einfach ein my-logback.xml in den Stamm eines Ihrer Klassenpfadeinträge setzen und -Dlogback.configurationFile=my-logback.xml angeben. Intern wird wahrscheinlich ClassLoader#getResource(String name) verwendet, um die Datei zu erhalten - überprüfen Sie das JavaDoc dieser Methode für weitere Informationen.

    
Christoph Leiter 25.10.2012 14:21
quelle
1

Die Antwort auf diese Frage finden Sie im angegebenen Link: Ссылка mit den folgenden Beispielen:

Die einzuschließenden Inhalte können als Datei, als Ressource oder als URL referenziert werden.

%Vor%     
arielw 08.02.2018 12:03
quelle
0

Ich habe eine etwas andere Lösung als Befehlszeilenargumente anzubieten.

Mein Projekt ist wie folgt eingerichtet:

%Vor%

Ich wollte das logback.xml außerhalb des Jars haben, da ich scanPeriod für das Live-Nachladen eingestellt habe. Ich dachte, da es auf dem Klassenpfad aufgenommen werden sollte, werde ich den Pfad zum manifest.mf hinzufügen und es wird automatisch aufgenommen.

Verwandte Teile von foo s pom.xml sieht folgendermaßen aus:

%Vor%

Wichtige Dinge zu beachten:

  • Maven-Ressourcen-Plugin
    • Kopiert alle Dateien in src/conf in den Standard-Kompilierungsordner target/conf .
  • Maven Jar Plugin
    • Fügt den conf -Ordner dem Klassenpfad von MANIFEST.MF hinzu, sodass Sie den Speicherort in der Befehlszeile nicht angeben müssen.
    • Alle Dateien im Ordner conf werden zum Klassenpfad hinzugefügt, nicht nur logback.xml

Damit das Jar in diesem Szenario ausgeführt wird, muss der Ordner conf neben dem Jar platziert werden. Es sieht so aus:

%Vor%

Das MANIFEST.MF sieht ungefähr so ​​aus:

%Vor%     
Scrambo 13.03.2018 15:25
quelle

Tags und Links