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