Log4J2-Eigenschaftsersetzung – Standard

Lesezeit: 3 Minuten

Benutzeravatar von Leos Literak
Leos Literak

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

Ich möchte den Dateipfad in der Java-Systemeigenschaft übergeben und ihn dann mit “${env:mySystemProperty}” verwenden. Aber was ist, wenn der Entwickler vergisst, diese Eigenschaft festzulegen? Dann hätte ich gerne einen sinnvollen Standardwert in log4j2.xml definiert.

Irgendeine Idee, wie man diese Funktionalität erreicht?

BEARBEITEN:

Die env-Substitution funktioniert bei mir nicht:

standalone.conf

-DoauthLoginLogPath=/path/oauth2.log

log4j2.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, aber ich kann es nicht erledigen.

Benutzeravatar von Remko Popma
Remko Popma

Standard-Property-Map

Anschauen http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution
Sie können eine standardmäßige Eigenschaftszuordnung in der Konfigurationsdatei angeben. Das nimmt diese Form an:

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

Dann, wenn Sie Ihre App mit Systemeigenschaft starten -DoauthLoginLogPath=/path/oauth2.logder Datei-Appender fileName Der Wert wird zuerst in den Systemeigenschaften nachgeschlagen, aber wenn dies fehlschlägt, wird auf die in der definierte Eigenschaft zurückgegriffen Properties oben in der Konfigurationsdatei log4j2.xml.

In der Reihe

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

<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

Übrigens die env Präfix ist für Umgebungsvariablen (wie %PATH% unter Windows) und hat nichts damit zu tun sys, das sind Java-Systemeigenschaften. Siehe auch http://logging.apache.org/log4j/2.x/manual/lookups.html

  • Ich weiß nicht, ob es in einer früheren Version funktioniert hat, aber das funktioniert nicht mehr. Sie müssen ‘:-‘ in der Eigenschaft verwenden, um den Standardwert zu definieren.

    – GoGoris

    14. Juni 2016 um 6:56 Uhr

  • Falls jemand Schwierigkeiten hat, den Standardwert inline zu setzen. Bitte beachten Sie, dass der Wert das ist, was nach dem Bindestrich kommt, zB wenn mein Standardpfad lautet /var/log/myfile.logdann würde ich schreiben ${sys:oauthLoginLogPath:-/var/log/myfile.log}

    – José Duarte

    19. Oktober 2021 um 23:06 Uhr

Benutzeravatar von GoGoris
GoGoris

Sie können dasselbe verwenden ${sys:propName:-default}Syntax. Beachten Sie das ‘:-‘, es heißt “variabler Standardwertbegrenzer“. Die Ursprünglich Wert für “variabler Standardwertbegrenzer” ist :-wie in bash und andere *nix Muscheln.

Mehr dazu können Sie in der Dokumentation zu Log4j 2 nachlesen StrSubstitutor Klasse.

Um dasselbe Beispiel zu verwenden:

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

  • Leider scheinen die Standardwerte zum Zeitpunkt des Ladens der Datei log4j2.xml aufgelöst zu werden. Es funktioniert nicht, Standardwerte für zB Variablen festzulegen, die über den Thread-Kontext injiziert werden sollen.

    – empf

    16. Juli 2017 um 20:20 Uhr

  • Korrektur: funktioniert, aber man muss noch eine zweite hinzufügen $z.B $${ctx:username:-UNKNOWN} 🙂

    – empf

    16. Juli 2017 um 20:24 Uhr

1441210cookie-checkLog4J2-Eigenschaftsersetzung – Standard

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy