propertyconfigurator logger example configurar java properties log4j

example - logger log4j java



Cómo configurar log4j con un archivo de propiedades (8)

Como los argumentos de JVM finalmente se pasan a su programa Java como variables del sistema, puede usar este código al principio de su punto de ejecución para editar la propiedad y hacer que log4j lea la propiedad que acaba de establecer en las propiedades del sistema.

try { System.setProperty("log4j.configuration", new File(System.getProperty("user.dir")+File.separator+"conf"+File.separator+"log4j.properties").toURI().toURL().toString()); } catch (MalformedURLException e) { e.printStackTrace(); }

¿Cómo consigo log4j para recoger un archivo de propiedades.

Estoy escribiendo una aplicación de escritorio Java que quiero usar log4j. En mi método principal si tengo esto:

PropertyConfigurator.configure("log4j.properties");

El archivo log4j.properties se encuentra en el mismo directorio cuando abro el Jar.

Sin embargo, me sale este error:

log4j: ERROR No se pudo leer el archivo de configuración [log4j.properties]. java.io.FileNotFoundException: log4j.properties (El sistema no puede encontrar el archivo especificado)

¿Qué estoy haciendo mal?


Creo que el directorio log4j.properties debe estar en el classpath de java. En su caso, la adición de CWD a la ruta de clase debería funcionar.


Creo que el método de configuración espera una ruta absoluta. De todos modos, también puede intentar cargar un objeto Propiedades primero:

Properties props = new Properties(); props.load(new FileInputStream("log4j.properties")); PropertyConfigurator.configure(props);

Si el archivo de propiedades está en el jar, entonces podrías hacer algo como esto:

Properties props = new Properties(); props.load(getClass().getResourceAsStream("/log4j.properties")); PropertyConfigurator.configure(props);

Lo anterior asume que log4j.properties está en la carpeta raíz del archivo jar.


Cuando usa PropertyConfigurator.configure ( String configFilename ), son la siguiente operación en la biblioteca log4j.

Properties props = new Properties(); FileInputStream istream = null; try { istream = new FileInputStream(configFileName); props.load(istream); istream.close(); } catch (Exception e) { ...

Falla en la lectura porque busca "Log4j.properties" del directorio actual donde se ejecuta la aplicación.

¿Qué tal la forma en que cambia la parte de lectura del archivo de propiedades de la siguiente manera, y coloca "log4j.properties" en el directorio en el que está establecida la CLASSPATH?

ClassLoader loader = Thread.currentThread().getContextClassLoader(); URL url = loader.getResource("log4j.properties"); PropertyConfigurator.configure(url);

Existe otro método para colocar "Log4j.properties" en el archivo jar.

jar xvf [YourApplication].jar log4j.properties


Esta es una edición de la respuesta de @kgiannakakis: el código original es incorrecto porque no cierra correctamente InputStream después de llamar a Properties.load(InputStream) . Desde los Javadocs: The specified stream remains open after this method returns.

================================

Creo que el método de configuración espera una ruta absoluta. De todos modos, también puede intentar cargar un objeto Propiedades primero:

Properties props = new Properties(); InputStream is = new FileInputStream("log4j.properties"); try { props.load(is); } finally { try { is.close(); } catch (Exception e) { // ignore this exception } } PropertyConfigurator.configure(props);

Si el archivo de propiedades está en el jar, entonces podrías hacer algo como esto:

Properties props = new Properties(); InputStream is = getClass().getResourceAsStream("/log4j.properties"); try { props.load(is); } finally { try { is.close(); } catch (Exception e) { // ignore this exception } } PropertyConfigurator.configure(props);

Lo anterior asume que log4j.properties está en la carpeta raíz del archivo jar.


Puede habilitar el registro interno log4j definiendo la variable '' log4j.debug ''.


Tengo este código en mi aplicación hoy

File log4jfile = new File("./conf/log4j.properties"); PropertyConfigurator.configure(log4jfile.getAbsolutePath());

La ruta relativa es desde el directorio de trabajo de la JVM (donde se inicia la JVM).


simplemente configure -Dlog4j.configuration = archivo: log4j.properties funcionó para mí.

log4j luego busca el archivo log4j.properties en el directorio de trabajo actual de la aplicación.

Recuerde que log4j.configuration es una especificación de URL , así que agregue ''file:'' delante de su nombre de archivo log4j.properties si quiere referirse a un archivo regular en el sistema de archivos, es decir, un archivo que no se encuentra en el classpath.

Inicialmente especifiqué -Dlog4j.configuration = log4j.properties. Sin embargo, eso solo funciona si log4j.properties está en la ruta de clase. Cuando copié log4j.properties a main / resources en mi proyecto y lo reconstruí de modo que se haya copiado en el directorio de destino (proyecto de Maven), esto también funcionó (o podría empaquetar su log4j.properties en sus archivos de proyecto, pero eso no permitir al usuario editar la configuración del registrador!).