Usar las variables de entorno del sistema en la configuración log4j xml

¿Es posible hacer referencia a variables de entorno del sistema (a diferencia de las propiedades del sistema Java) en un archivo de configuración log4j xml?

Me gustaría poder hacer algo como:

 

y obtenerlo de las variables de entorno del sistema, por lo que puedo evitar tener que pasar tantas cosas con parámetros -D.

Esta syntax está documentada solo en log4j 2.X así que asegúrese de estar utilizando la versión correcta. No funciona en las versiones 1.X.

     %d %p %c{1.} [%t] %m %ex%n    

Intenté hacer eso recientemente y no pude hacerlo funcionar. Lo que terminé haciendo es enviar una variable al inicio. Entonces, supongamos que tiene una variable de entorno llamada $ LOG_LEVEL:

  

y al inicio …

 java -Dlog_level=$LOG_LEVEL your_app 

Creo que esto no es compatible, pero básicamente puedes hacer dos cosas para traer tus variables de entorno:

  1. Use System.setProperty antes de que se configure Log4J

  2. Convierta (su) variables de entorno a propiedades del sistema en su iniciador

La primera opción básicamente se reduce a esto:

 for (Map.Entry entry : System.getenv().entrySet()) { System.setProperty(entry.getKey(), entry.getValue()); } 

… pero la pregunta es, por supuesto, dónde poner este código. En particular, si está ejecutando dentro de algún tipo de contenedor de Tomcat o similar, esto podría ser problemático.

El otro depende en gran medida de su entorno. Básicamente, si tiene un script de shell que inicia su aplicación, puede escribir algo de magia de shell para establecer todas las variables de entorno como propiedades, o solo las que necesita, por ejemplo:

 java -DMY_ENV=$MY_ENV -DMY_OTHER_ENV=$MY_OTHER_ENV -cp ... com.example.Main 

También es posible modificar las secuencias de comandos de inicio del servidor para admitir esto, por ejemplo, catalina.sh o similar.

Debes poner dos puntos entre env y el nombre de la variable, así:

  

Crea una variable del sistema Prefiero usar setenv.bat para tales variables.

 @echo off rem app specific log dir set "APP_LOG_ROOTDIR=../app/app-log" exit /b 0 

Agregar referencia en el archivo log4j.xml