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

jconlin
fuente
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 Agnew
fuente
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

30thh
fuente
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

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

Tim Büthe
fuente
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.

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

Vineet Menon
fuente
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
ridox
fuente
0

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

  applicationDefaultJvmArgs = [
             "-Dlog4j.configurationFile=your.xml",
                              ]
emanuel07
fuente