2015-07-17 12 views
8

Ich habe einen RollingFile Appender in meiner log4j2.xml definiert.Benutzer-JVM-Parameter in log4j2-Konfiguration

<RollingFile name="RollingFile" fileName="/logs/app.log" 
      filePattern="logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz"> 
      <PatternLayout> 
       <Pattern>%d{HH:mm:ss.SSS} - %-5p - %m - [%l]%n</Pattern> 
      </PatternLayout> 
      <Policies> 
       <TimeBasedTriggeringPolicy /> 
       <SizeBasedTriggeringPolicy size="10 MB" /> 
      </Policies> 
      <DefaultRolloverStrategy max="20" /> 
</RollingFile> 

Was ich tun möchte, ist dieser Parameter auf der JVM beim Start passieren:

-Dapp_home=/home/admin/server 

Die documentation ist ziemlich geradlinig. Und von dem, was ich verstehe, sollte es so funktionieren:

<RollingFile name="RollingFile" fileName="${jvmrunargs:app_home}/logs/app.log" 

Aber es tut es nicht. Ich habe überprüft, dass es im Allgemeinen funktioniert, indem ich den absoluten Pfad verwende.

In einer anderen Anwendung, wo ich log4j (1.x) verwenden es funktioniert dies wie:

log4j.appender.file.File=${app_home}/logs/app.log 

Antwort

13

einen Blick auf den Abschnitt der Dokumentation System Properties Lookup nehmen. Wenn Sie eine Variable als Systemeigenschaft mit -D wie folgt definieren:

-Dapp_home=/home/admin/server 

Verwendung

${sys:app_home} 

in Ihrem Log4j 2-Konfiguration, um darauf zuzugreifen.

+1

Ihre Antwort ist besser geschrieben, aber der Inhalt/die Antwort ist die gleiche. Ich werde meine löschen. Es gibt einen Bearbeitungsschaltfläche aus einem Grund, verwenden Sie es, anstatt ein Duplikat zu buchen. – alan7678

+0

Ich habe die Bearbeitungsschaltfläche nie für etwas anderes als Codeformatierung verwendet. Es fühlt sich an, als würde man sich mit dem Eigentum einer anderen Person herumschlagen. Aber ich denke, das ist die Art, wie Stackoverflow funktionieren soll. Ich werde es beim nächsten Mal erinnern. Danke für das Aufzeigen! – hzpz

+0

Gleiche Antwort, dasselbe Ergebnis! Es klappt! :) Danke euch beiden! – Chris