log4java example ejemplo java logging log4j log4j2

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