Cargue java.util.logging.config.file para la inicialización predeterminada
-
03-07-2019 - |
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?
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.