Pregunta

Estoy intentando cargar un archivo log.properties personalizado cuando se inicia mi aplicación.

Mi archivo de propiedades está en el mismo paquete que mi clase principal, por lo que asumí que el parámetro de línea de comando -Djava.util.logging.config.file = log.properties debería obtener el archivo de propiedades cargado.

Pero las propiedades solo se cargan cuando especifico una ruta absoluta completa al archivo de propiedades. ¿Alguna sugerencia sobre cómo usar una ruta relativa?

¿Fue útil?

Solución

El registro de Java no busca un archivo en todo el disco duro; Hay reglas muy simples de cómo se buscan los archivos. Quieres que Java vea que los dos archivos se pertenecen, pero no lo dijiste en ninguna parte. Como Java no ve ninguna conexión entre el archivo de propiedades y su clase, excepto que están en la misma carpeta de su disco, no puede encontrar el archivo.

-Djava.util.logging.config.file = log.properties solo funciona si el archivo log.properties está en el directorio actual del proceso de Java (que puede ser bastante aleatorio). Así que deberías usar una ruta absoluta aquí.

Una solución alternativa sería mover el archivo logging.properties a $ JAVA_HOME / lib / (o editar el archivo que debería estar allí). En ese caso, no es necesario establecer una propiedad del sistema.

Otros consejos

Puede cargar dinámicamente los archivos de propiedades java.util.logging desde una ruta relativa muy fácilmente. Esto es lo que pongo dentro de un bloque static {} en mi clase Main . Coloque su archivo logging.properties en el paquete predeterminado y podrá acceder a él muy fácilmente con el siguiente código.

final InputStream inputStream = Main.class.getResourceAsStream("/logging.properties");
try
{
    LogManager.getLogManager().readConfiguration(inputStream);
}
catch (final IOException e)
{
    Logger.getAnonymousLogger().severe("Could not load default logging.properties file");
    Logger.getAnonymousLogger().severe(e.getMessage());
}

el registro de utilidades no se carga desde classpath, necesita una ruta absoluta, por lo que otros paquetes de registro como log4j son mucho más fáciles de configurar y mejores para las aplicaciones web en las que es difícil obtener rutas abs.

esto no se explica en absoluto en el java.util.logging.LogManager doco.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top