2016-05-24 5 views
2

Ich habe ein Intellij Java-Projekt.Wie log4j Ausgabedatei relativ zu meinem Jar zu setzen?

Ich habe diese log4j.properties hinzugefügt

# Root logger option 
log4j.rootLogger=INFO, file, stdout 

# Direct log messages to a log file 
log4j.appender.file=org.apache.log4j.RollingFileAppender 
log4j.appender.file.File=C:\\logging.log 

Wie kann ich die log4j.appender.file.File mein Projekt Lage relativ zu sein?

Wie kann ich die Ausgabedatei sein:

src/main/resources/logs/log.txt?

+0

Sie sich nicht src/main/resources enthalten sollte, da dies zunächst nur in Ihrem IDE/Projekt Quelle verfügbar sein wird, und zum anderen Ende als Klassenpfad in einem Container wie ein Glas oder ein Krieg. – Stefan

Antwort

4

Sie können .\your file name verwenden.

.\ wird verwendet, um Ihren Projektstandort zu verweisen.

z.B. .\abc.log, im Falle von Eclipse ist diese Datei in Ihrem Projektordner im Arbeitsbereich vorhanden.

Im Falle von Jar wird diese Datei in einen Ordner geschrieben, in dem Ihre .jar-Datei vorhanden ist.

+0

ändert es sich, wenn ich Test- oder Produktcode ausführe? Testcode wird protokolliert, wenn sich die Datei log4j.properties in 'src/main/resources' befindet? –

+0

./ stellen nur den relativen Pfad zum Projekt dar. –

+0

mir fehlt noch etwas in der Eigenschaftendatei. Kannst du einen Blick hier werfen http://stackoverflow.com/questions/37449034/why-is-log4-appender-member-is-null-cannot-init-log4j?noredirect=1#comment62400062_37449034? –

0

Ich konnte keine direkte Lösung finden, indem ich die richtige Eigenschaft in log4j.properties festlegte. Ich kann jedoch zwei Lösungen vorschlagen. Wenn Sie den relativen Pfad in den Eigenschaften festlegen, wird der relative Pfad nicht zum Projekt (oder jar), sondern zum Verzeichnis, in dem Sie Ihre App ausführen, relativiert. Wenn Sie also zum Beispiel einen Dienst erstellen, der Ihr jar aufruft, wird er es aus dem Verzeichnis /etc/init.d aufrufen, und Ihre Protokolle (höchstwahrscheinlich) werden nirgendwohin führen.

Eine der Optionen besteht darin, eine Umgebungsvariable festzulegen, in der Sie Ihre Protokolle speichern möchten. Log4j behandelt Umgebungsvariablen. Just set log4j.appender.file.File=${varname}

Eine weitere Option, wenn Sie Shell-Skript verwenden, um Ihren Dienst/app/jar, cd zu seinem Verzeichnis vor dem Ausführen starten (vorausgesetzt, Sie haben Ihren Pfad log4j.appender.file.File=./logs/myOutput.log gesetzt). Etwas wie folgt aus:

process="/path/to/your/jar/test.jar" 
processName=`basename $process` 
processDir=`dirname $process` 

cd $processDir 
java -jar "./$processName" 

in diesem Fall Ihre Protokolle werden in /path/to/your/jar/logs/myOutput.log

Verwandte Themen