¿Configuración de log4j a través de argumentos JVM?


133

¿Qué variables tengo que establecer / pasar como argumentos a la JVM para que log4j se ejecute correctamente? Y con apropiadamente quiero decir no quejarse e imprimir en la consola. ¿Puedo ver un ejemplo típico?

Nota: Necesito evitar crear un archivo log4j.properties en la aplicación.


2
Cuidado con el lector: es importante notar que la pregunta es sobre log4j, no log4j2.
neves

Respuestas:


161

¿Tiene un archivo de configuración log4j? Solo referencialo usando

-Dlog4j.configuration={path to file}

donde {ruta al archivo} debe tener el prefijo file:

Editar: si está trabajando con log4j2, debe usar

-Dlog4j.configurationFile={path to file}

Tomado de la respuesta https://stackoverflow.com/a/34001970/552525


Brian: no es exactamente lo que estaba buscando, pero creo que es un compromiso decente entre mover un archivo a mi aplicación y configurar las propiedades a través de argumentos JVM.
jconlin

Creo que a medida que su aplicación se vuelve más compleja (si lo hará), el archivo se vuelve más manejable a medida que lo configura más. Sin embargo, confieso que adivino su caso de uso aquí.
Brian Agnew

25
{path to file}necesita anteponerse file:para que esto funcione.
O Mapper

2
@ORMapper - He enmendado apropiadamente
Brian Agnew

66
Tenga cuidado si usa Log4j 2 ya que el nombre de propiedad y la sintaxis cambiaron. Mira esta respuesta .
José Andias

161

La solución está utilizando el siguiente argumento JVM:

-Dlog4j.configuration={path to file}

Si el archivo NO está en el classpath (en el WEB-INF/classescaso de Tomcat) pero en algún lugar de su disco, use file:, como

-Dlog4j.configuration=file:C:\Users\me\log4j.xml

Más información y ejemplos aquí: http://logging.apache.org/log4j/1.2/manual.html


2
Para Logback:-Dlogback.configurationFile=C:\logback-test.xml
30 de

2
1 para el archivo de mencionar (reiterando lo que dijo Tim Esto me loco con log4j ha conducido un número de veces..
javadba

13
Otro argumento de JVM muy útil para depurar la configuración de log4j:-Dlog4j.debug
KC

2
¿Es posible usar la ruta relativa con este método?
AaA

33

Esto parece haber cambiado (probablemente con log4j2) a:

-Dlog4j.configurationFile=file:C:\Users\me\log4j.xml

Ver: https://logging.apache.org/log4j/2.x/manual/configuration.html


Esto me da la siguiente excepción. C: \ Development \ Eclipses \ EclipseMars \ file: C: \ Users \ ABC \ log4j2.xml ¿Cómo hago que la ruta sea absoluta?
Cybermonk

Para Docker Containers, solía JAVA_PARAMS="-Dlog4j.configurationFile=classpath:log4j2-container.xml"si Docker Image admite anular JAVA_PARAMS con env vars y el archivo está dentro del Jar.
Marcello de Sales

21

Sé que esto ya está respondido, pero como dijiste, esto no es exactamente lo que estás buscando, me gustaría señalar la siguiente alternativa:

También puede usar una clase de configuración en lugar de las propiedades o el archivo xml.

-Dlog4j.configuratorClass=com.foo.BarConfigurator

Ver http://logging.apache.org/log4j/1.2/manual.html para más detalles.


1
Esta es la solución correcta si alguien quiere evitar crear un archivo de configuración. Dentro de su propia clase Configurador personalizada, puede llamar a BasicConfigurator (), o crear sus propios Loggers y Appenders como desee. ¡Pero preferiría un archivo de configuración!
skiphoppy

11

En general, siempre y cuando su archivo log4j.properties esté en el classpath, Log4j debería recogerlo automáticamente al iniciar JVM.


1
Esto es cierto: la configuración -Dlog4j. solo es necesaria si el archivo no estaba en el classpath o si desea utilizar un archivo que no es el primero encontrado en el classpath
javadba

8

Tarde a la fiesta desde 2015, Log4J 1.x ha llegado a EOL .

Log4J 2.x en adelante la opción JVM debería ser-Dlog4j.configurationFile=<filename>


PS <filename>podría ser un archivo relativo a la ruta de la clase sin lo file:que se sugiere en las otras respuestas.


2
Respuesta importante, ya que las otras respuestas ya no son válidas.
Yossale

1

La ruta relativa también está bien:

java -Dlog4j.configuration=file:".\log4j.properties" -jar com.your-1.0-SNAPSHOT.jar

o

java -Dlog4j.configuration=file:".\log4j.xml" -jar com.your-1.0-SNAPSHOT.jar

0

Si estás usando gradle. Puede aplicar el complemento de 'aplicación' y usar el siguiente comando

  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.