2009-04-22 857 views
103

¿Qué variables debo establecer/pasar como argumentos a la JVM para que log4j se ejecute correctamente? Y de manera adecuada quiero decir que no me quejo e imprimo en la consola. ¿Puedo ver un ejemplo típico?log4j configuración a través de argumentos de JVM?

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

Respuesta

121

¿Tiene un archivo de configuración log4j? Simplemente hacer referencia a ella usando

-Dlog4j.configuration={path to file} 

donde {} ruta al archivo debe ser prefijado con file:

+0

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

+0

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

+0

En el caso de logback.xml, -Dlogback.configuration = {ruta al archivo} no funciona. ¿Cualquier sugerencia? –

10

En general, el tiempo que su archivo log4j.properties está en la ruta de clases, Log4J debe escoger sólo automáticamente hacia JVM puesta en marcha.

+1

Esto es cierto: la configuración -Dlog4j.sólo es necesaria si el archivo no se encontraba en la ruta de clase o si desea utilizar un archivo que no es el primero encontrado en la ruta de clase – javadba

17

Sé que esto ya está contestada, pero como usted ha dicho, esto no es exactamente lo que está buscando, me gustaría señalar lo siguiente alternativa:

También puede utilizar 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 detalles.

+1

Esta es la solución correcta si alguien quiere evitar creando un archivo de configuración Dentro de tu propia clase personalizada de Configurador, puedes llamar a BasicConfigurator() o crear tus propios Loggers y Anexos como quieras. ¡Pero preferiría un archivo de configuración! – skiphoppy

146

La solución es utilizar el siguiente argumento JVM:

-Dlog4j.configuration={path to file} 

Si el archivo no está en la ruta de clase (en WEB-INF/classes en caso de Tomcat), pero en algún lugar de su disco, utilice 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' – 30thh

+2

+1 por mencionar el archivo (reiterando lo que Tim dijo. Esto me ha vuelto loco con log4j varias veces. – javadba

+12

Otro argumento de JVM muy útil para debug log4j config: '-Dlog4j.debug' –

15

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

+0

Esto me da la siguiente excepción: C: \ Desarrollo \ Eclipses \ EclipseMars \ archivo: C: \ Users \ ABC \ log4j2. xml ¿Cómo puedo hacer que la ruta absoluta – Cybermonk

+1

esto funcionó para mí, gracias! – brendon

2

tarde a la fiesta, ya que desde 2015, ha alcanzado Log4J 1.x EOL.

Log4J 2.x en adelante, el JVM option debe ser -Dlog4j.configurationFile=<filename>


P. S. <filename> podría ser un archivo relativo a la ruta de clase sinfile: como se sugiere en las otras respuestas.

+0

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

Cuestiones relacionadas