web-dev-qa-db-de.com

Ersetzung von Log4J2-Eigenschaften - Standard

Ich frage mich nur, ob es eine Möglichkeit gibt, einen Standardwert für die Eigenschaftssubstitution in LOG4J bereitzustellen.

Ich möchte den Dateipfad in der Systemeigenschaft Java= und dann mit "$ {env: mySystemProperty}" verwenden. Aber was ist, wenn der Entwickler vergisst, diese Eigenschaft festzulegen? Dann hätte ich gerne eine sinnvoller Standardwert in log4j2.xml definiert.

Irgendeine Idee, wie diese Funktionalität erreicht werden kann?

BEARBEITEN:

Die env-Ersetzung funktioniert bei mir nicht:

standalone.conf

-DoauthLoginLogPath=/path/oauth2.log

log44j2.xml

<Appender type="File" name="File" fileName="${env:oauthLoginLogPath}" immediateFlush="true">
<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath}" immediateFlush="true">

Ich kann die Eigenschaft in der Wildfly-Konsole sehen. Ich habe den Server neu gestartet, kann sie jedoch nicht ausführen.

41
Leos Literak

Default Property map

Unter http://logging.Apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution können Sie eine Standardeigenschaftenzuordnung in der Konfigurationsdatei angeben. Das hat folgende Form:

<Configuration status="debug">
  <Properties>
    <Property name="oauthLoginLogPath">default/location/of/oauth2.log</Property>
  </Properties>
  ...
  <Appenders>
    <Appender type="File" name="File" fileName="${sys:oauthLoginLogPath}">
    ....
</Configuration

Wenn Sie Ihre App dann mit der Systemeigenschaft -DoauthLoginLogPath=/path/oauth2.log Starten, wird der Wert für File appender fileName zuerst in den Systemeigenschaften nachgeschlagen. Wenn dies jedoch fehlschlägt, wird auf die in definierte Eigenschaft zurückgegriffen den Abschnitt Properties oben in der Konfigurationsdatei log4j2.xml.

Inline

Eine zweite Möglichkeit besteht darin, den Standardwert inline anzugeben:

<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath:-default/location/of/oauth2.log}">

Im Allgemeinen folgen alle Log4j2-Lookups diesem Muster: ${type:key:-defaultValue}.

Env vs sys

Das env-Präfix steht übrigens für Umgebungsvariablen (wie% PATH% unter Windows) und steht nicht in Beziehung zu sys, das Java System) ist Siehe auch http://logging.Apache.org/log4j/2.x/manual/lookups.html

62
Remko Popma

Sie können das gleiche ${sys:propName:-default}Syntax. Beachten Sie das ': -', es heißt " variabler Standardwertbegrenzer". Der Wert default für das Trennzeichen " variable default value" ist :-, wie in bash und anderen * nix Shells.

Weitere Informationen hierzu finden Sie in der Dokumentation zu Log4j 2 für die Klasse StrSubstitutor .

So verwenden Sie dasselbe Beispiel:

<Configuration status="debug">
  ...
    <Appenders>
        <Appender type="File" name="File"
                  fileName="${sys:oauthLoginLogPath:-default/location/of/oauth2.log}">
        ....
    </Appenders>
</Configuration>
16
GoGoris