web-dev-qa-db-fra.com

Substitution de propriété Log4J2 - par défaut

Je me demande simplement s'il existe un moyen de fournir une valeur par défaut pour la substitution de propriété dans LOG4J?

Je veux transmettre le chemin du fichier dans Java et ensuite l'utiliser avec "$ {env: mySystemProperty}". Mais que se passe-t-il si le développeur oublie de définir cette propriété? Alors, j'aimerais en avoir valeur par défaut significative définie dans log4j2.xml.

Une idée de comment réaliser cette fonctionnalité?

MODIFIER:

La substitution env ne fonctionne pas pour moi:

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">

Je peux voir dans la console Wildfly la propriété, j'ai redémarré le serveur mais je ne peux pas le faire.

41
Leos Literak

Carte des propriétés par défaut

En regardant http://logging.Apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution vous pouvez spécifier une carte de propriétés par défaut dans le fichier de configuration. Cela prend cette forme:

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

Ensuite, si vous démarrez votre application avec la propriété système -DoauthLoginLogPath=/path/oauth2.log, la valeur File appender fileName sera d'abord recherchée dans les propriétés système, mais si cela échoue, elle reviendra à la propriété définie dans la section Properties en haut de log4j2 Fichier de configuration .xml.

Inline

Une deuxième façon consiste à fournir la valeur par défaut en ligne:

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

Généralement, toutes les recherches Log4j2 suivent ce modèle: ${type:key:-defaultValue}.

Env vs sys

Par ailleurs, le préfixe env est pour les variables d'environnement (comme% PATH% sous Windows), et n'est pas lié à sys, qui est Java system Voir aussi http://logging.Apache.org/log4j/2.x/manual/lookups.html

62
Remko Popma

Vous pouvez utiliser le même ${sys:propName:-default}syntaxe. Remarquez le ': -', il s'appelle " délimiteur de valeur par défaut variable". La valeur par défaut pour le " délimiteur de valeur par défaut variable" est :-, comme dans bash et d'autres * nix shells.

Vous pouvez en savoir plus à ce sujet dans la documentation Log4j 2 pour la classe StrSubstitutor .

Pour utiliser le même exemple:

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