Es gibt verschiedene Möglichkeiten zum Suchen in log4j2
. Lassen Sie mich einige Details ergänzen -
Context Map Lookup - Für Wert setzen Kontext Karte verwenden, verwenden Sie folgenden Code -
org.apache.logging.log4j.ThreadContext.put("logFileName", "app.log");
Variable kann mit ${ctx:logFileName}
oder %X{logFileName}
in der Konfigurationsdatei zugegriffen werden.
Kontext Map Lookup wird im Allgemeinen in Web-Anwendung verwendet, wo Sie einen Wert für jede Benutzeranforderung wünschen, d. H. Für jede thread
.
Umwelt Lookup - Umwelt-Lookup zum Nachschlagen Systemumgebungsvariablen wie USERNAME
, PLATFORM
verwendet. Sie können alle Umgebungsvariablen in Java drucken unter Verwendung -
System.out.println(System.getenv());
oder irgendeine spezifische Umgebungsvariable -
System.out.println(System.getenv("NUMBER_OF_PROCESSORS"));
jedoch von Java-Programm, können Sie festlegen, Umgebungsvariablen nicht.
Wie Sie in Ihrem Code erwähnt haben, kann auf Umgebungsvariablen unter Verwendung der Syntax ${env:NUMBER_OF_PROCESSORS}
zugegriffen werden.
Java Lookup - Java-Lookup ist für Java-Umgebung Informationen wie java version
, hardware
usw. Variablen festgelegt ist und nicht in Java-Programm eingestellt werden.
Auf solche Variablen kann unter Verwendung der ${java:vm}
Syntax zugegriffen werden, wobei vm
java-Umgebungsvariablenname ist.
Systemeigenschaften Lookup - Es ist leicht zu bekommen und solche Eigenschaften mit folgendem Code festgelegt -
System.setProperty("logFileName", "app.log");
System.getProperty("logFileName");
Variablen können in log4j2 Konfigurationsdatei ${sys:logFileName}
Syntax zugegriffen werden.
Eine gute Sache über diese Systemeigenschaften ist, dass Sie diese Eigenschaften als VM Arguments
an Ihr Programm wie -DlogFileName=app3.log
übergeben können.
Es gibt andere Nachschlagemechanismus wie auch Datum Lookup, Map Lookup usw., die hauptsächlich verwendet werden. Rest Details können here
geprüft werden, da Sie Dateinamen dynamisch in Ihrer Anwendung festlegen möchten, und wenn Sie den Dateinamen nur einmal einstellen wollen, würde ich Ihnen System property
vorschlagen. Aber stellen Sie sicher, dass Sie System Property
vor der Initialisierung setzen log4j
ist es nicht nur ein Tippfehler? (Sie haben '$ {env: USERERNAME}' geschrieben) –
nein - ich habe die Frage geklärt, um –
zu verdeutlichen Ich meinte in Ihrer Config: '