java - example - Sustitución de propiedad Log4J2-predeterminado
log4j2 properties example (2)
Puede usar la misma sintaxis de ${sys:propName:-default}
. Observe que '': -'', se llama " delimitador de valor predeterminado variable ". El valor predeterminado para el " delimitador de valor predeterminado de variable " es :-
, como en bash y otras * nix shells.
Puede leer más sobre esto en la documentación de Log4j 2 para la clase StrSubstitutor .
Para usar el mismo ejemplo:
<Configuration status="debug">
...
<Appenders>
<Appender type="File" name="File"
fileName="${sys:oauthLoginLogPath:-default/location/of/oauth2.log}">
....
</Appenders>
</Configuration>
Me pregunto si hay alguna forma de proporcionar un valor predeterminado para la sustitución de propiedades en LOG4J.
Quiero pasar la ruta del archivo en la propiedad del sistema java y luego usarlo con "$ {env: mySystemProperty}". Pero, ¿qué ocurre si el desarrollador olvida establecer esta propiedad? Entonces me gustaría tener un valor predeterminado significativo definido en log4j2.xml.
¿Alguna idea de cómo lograr esta funcionalidad?
EDITAR:
La sustitución env no funciona para mí:
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">
Puedo ver en la consola Wildfly la propiedad, reinicié el servidor pero no puedo hacerlo.
Mapa de propiedad predeterminado
Si mira http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution , puede especificar un mapa de propiedades predeterminado en el archivo de configuración. Eso toma esta forma:
<Configuration status="debug">
<Properties>
<Property name="oauthLoginLogPath">default/location/of/oauth2.log</Property>
</Properties>
...
<Appenders>
<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath}">
....
</Configuration
Luego, si inicia su aplicación con la propiedad del sistema -DoauthLoginLogPath=/path/oauth2.log
, el valor del -DoauthLoginLogPath=/path/oauth2.log
del file appender primero se buscará en las propiedades del sistema, pero si eso falla, volverá a la propiedad definida en las Properties
sección en la parte superior del archivo de configuración log4j2.xml.
En línea
Una segunda forma es proporcionar el valor predeterminado en línea:
<Appender type="File" name="File" fileName="${sys:oauthLoginLogPath:-default/location/of/oauth2.log}">
En general, todas las búsquedas de Log4j2 siguen este patrón: ${type:key:-defaultValue}
.
Env vs sys
Por cierto, el prefijo env
es para variables de entorno (como% PATH% en Windows) y no está relacionado con sys
, que son las propiedades del sistema Java. Ver también http://logging.apache.org/log4j/2.x/manual/lookups.html