2016-07-12 10 views
0

Ich möchte angeben können, wo meine Log4j2-Logs entweder mit VM-Argumenten oder Befehlszeilenargumenten gehen.Log4j2, wie man das Logging-Ausgabeverzeichnis mit Kommandozeilenargumenten steuert

Dies ist anders als alle Fragen, die sich fragen, wie der Dateipfad log4j-Eigenschaften angegeben wird.

Ich dachte, ich -Darbitrary.path="path/to/root/dir" in den VM Argumente hinzufügen könnte und verweisen Sie dann in log4j2.properties:

<?xml version="1.0" encoding="UTF-8"?> 
<Configuration status="WARN"> 
    <Appenders> 
     <File name="file" fileName="${arbitrary.path}/application.log"> 
      <PatternLayout 
       pattern="[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n" /> 
     </File> 
    </Appenders> 
    <Loggers> 
     <Root level="info" additivity="false"> 
      <AppenderRef ref="file" /> 
     </Root> 
    </Loggers> 
</Configuration> 

Ach, es scheint, dass dies nicht funktioniert. Gibt es etwas, das ich falsch mache, oder eine alternative Möglichkeit, diese Funktionalität zu bekommen?

[EDIT]

Basierend auf den Vorschlag von @RC. Habe ich versucht, auch an die Befehlszeilenargumente Hinzufügen --log-dir "/tmp/logMonitor/logs" und verändert die Referenz auf ${main:--log-dir}. Diese Variable wird jedoch aufgelöst als "-log-dir" und setzt die Log-Datei in <project_root>/-log-dir/application.log [/ EDIT]

+0

Haben Sie gelesen: https://logging.apache.org/log4j/2.0/manual/lookups.html? –

+0

Basierend auf dem Teil dieses Links, auf den Sie sich beziehen, versuchte ich eine andere Strategie, aber ohne Erfolg. Ich habe Informationen zu der Frage hinzugefügt. – ds390s

+0

Ich würde die "Umgebung" Variablen verwenden, es ist viel einfacher –

Antwort

1

Log4j 2 kann Eigenschaften in der Konfiguration ersetzen. Die Eigenschaftswerte können von vielen Stellen kommen: Systemeigenschaften, Umgebung, Threadkontext, Ressourcenbündel usw. Diese werden Lookups genannt und benötigen ein Präfix. Verwenden Sie beispielsweise ${sys:arbitrary.path}, um den Wert in den Systemeigenschaften zu finden. Siehe Abschnitt Lookups des Log4j 2-Handbuchs.

Die Alternative ist, dass Sie die arbitrary.path Eigenschaft, sich in der Konfiguration definieren:

<Configuration status="warn"> 
    <Properties> 
     <Property name="arbitrary.path">/some/path/"</Property> 
    </Properties> 
    ... 
+0

Ich denke, ich sehe, wie ich das jetzt tun würde. Danke für den Link zu Lookups. – ds390s

0

Nur um zu klären, wenn Sie den Pfad in VM-Befehlszeilenargumente liefern, würden Sie sys Lookup-Präfix verwenden. Dies war für mich am Anfang verwirrend, als ich versuchte, jvmrunargs oder env zu verwenden und nicht funktionierte.