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.
Para log4j2, use la opción configurationFile :
java -Dlog4j.configurationFile=/path/to/log4j2.xml -jar ...
http://logging.apache.org/log4j/2.0/manual/configuration.html
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".
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());
}
}