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