example ejemplo java logging log4j

java - ejemplo - Archivo log4j.xml externo



log4j2 configuration file location (9)

Estoy intentando ejecutar un archivo jar con el archivo log4j.xml en el sistema de archivos fuera del contenedor de la siguiente manera:

java -jar MyJarName.jar -cp=/opt/companyName/pathToJar/ log4j.configuration=log4j.xml argToJar1 argToJar2

También he intentado:

java -jar MyJarName.jar -cp=/opt/companyName/pathToJar/ log4j.configuration=/opt/companyName/pathToJar/log4j.xml argToJar1 argToJar2

El archivo log4j.xml está en el mismo directorio que jar (/ opt / companyName / pathToJar /), pero aún así recibo el mensaje de advertencia estándar:

log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle). log4j:WARN Please initialize the log4j system properly.

¿Es posible tener el archivo de configuración fuera del contenedor o tengo que empaquetarlo con el contenedor?

TIA


"-jar" solo usa el classpath dentro del jar ejecutable, y -cp es ignorado. Añadiendo "." al classpath en el jar ejecutable debería permitir que log4j.xml sea fount.


¿Has probado java -Dlog4j.configuration=/path/to/log4j.xml -jar <rest-of-args>


Cuando se utiliza el -jar para iniciar un archivo jar ejecutable, el classpath se obtiene del manifiesto del archivo jar. El -cp , si se da, se ignora.

La respuesta de Jeff Storey será la solución más fácil. Alternativamente, puede agregar un atributo de Class-Path al manifest del archivo jar.

EDITAR Intenta habilitar la depuración de log4j y hacer que la ruta a log4j.xml una URL totalmente calificada. Por ejemplo:

java -Dlog4j.debug -Dlog4j.configuration=file:/path/to/log4j.xml -jar ...


La configuración de ruta más simple para `` log4j2 is using the setting bloque estático log4j.configurationFile`:

public class MyClass { static { System.setProperty("log4j.configurationFile", "./config/log4j2.xml"); } protected final transient Logger logger = LogManager.getLogger(IDOLTracker.class); public static void main(String[] args) { logger.info(""); } }

Entonces la estructura podría ser como:

ProgramFolder
| ---- /config/log4j2.xml
| ---- MyClass.jar

Cuando ejecuta su jar, se verá fuera del jar para el archivo xml.



Tuve problemas para usar log4j con JDK de Sun y la configuración automática.

Puedes usar esto:

String filename = System.getProperty("log4j.configuration"); DOMConfigurator(filename);

antes de usar Logger.


esto funciona:

java -jar -Dlog4j.configuration="file:d:/log4j.xml" myjar.jar


java -cp "ruta / a / su / log4jxml: ruta / a / sujar.jar" su.paquete.MainClass

Log4j.xml en el directorio "ruta / a / su / log4jxml" sobrescribirá el archivo log4j.xml en "ruta / a / sujar.jar".

Consulte Configuración de múltiples jar en classpath java .


puede definir un archivo de propiedades predeterminado en el jar. si no se define ninguna propiedad personalizada, puede usar este archivo predeterminado. Si se define una propiedad personalizada, puede anular la propiedad predeterminada.

El archivo myjar.jar contiene log4j.default.configuration

puede ejecutar su programa con estos parámetros para iniciar su aplicación

java -jar -Dlog4j.configuration=log4j.properties target/yourfile-v01_000_01_c002.jar

Código de ejemplo

public static void main(String[] args) { String filename = System.getProperty("log4j.configuration"); if(null==filename||filename.trim().equals("")) { logger.info("Using default log4j configuration log4j.default.properties."); logger.info("If you would like to change the default configuration please add following param before startup -Dlog4j.configuration=<log4jfile>"); PropertyConfigurator.configure( Main.class.getResourceAsStream("/log4j.default.properties")); } else { File file = new File(filename); if(!file.exists()) System.out.println("It is not possible to load the given log4j properties file :"+file.getAbsolutePath()); else PropertyConfigurator.configure(file.getAbsolutePath()); } }