logger - ¿Cómo configurar el registro de java usando un archivo de propiedades?(java.util.logging)
logger java import (5)
¿Está buscando el archivo de registro en la ruta correcta?% H / one% u.log
Aquí% h se resuelve en su hogar: en Windows esto se establece de manera predeterminada en: C: / Documents and Settings (user_name).
He intentado con el código de muestra que ha publicado y funciona bien después de especificar la ruta del archivo de configuración (logging.properties a través de código o java args).
Tengo un problema estúpido de registro Java: estoy cargando la configuración de registro desde el archivo de configuración de mi aplicación, pero simplemente no registra nada después de leer el archivo (que se parece mucho a los ejemplos que encontrará en la red, excepto por el configuración de aplicación adicional: eliminar esto tampoco ayuda). La línea de registro "inicializando ..." parece estar bien, pero la "aplicación de inicio" y cualquier mensaje adicional no se registran en la consola, ni se crea el archivo de registro. ¿Que me estoy perdiendo aqui?
El código de Logger se ve así:
...
Logger log = Logger.getLogger("myApp");
log.setLevel(Level.ALL);
log.info("initializing - trying to load configuration file ...");
Properties preferences = new Properties();
try {
FileInputStream configFile = new FileInputStream("/path/to/app.properties");
preferences.load(configFile);
LogManager.getLogManager().readConfiguration(configFile);
} catch (IOException ex)
{
System.out.println("WARNING: Could not open configuration file");
System.out.println("WARNING: Logging not configured (console output only)");
}
log.info("starting myApp");
...
Y este es el archivo de configuración:
appconfig1 = foo
appconfig2 = bar
# Logging
handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = ALL
# File Logging
java.util.logging.FileHandler.pattern = %h/myApp.log
java.util.logging.FileHandler.formatter = java.util.logging.SimpleFormatter
java.util.logging.FileHandler.level = INFO
# Console Logging
java.util.logging.ConsoleHandler.level = ALL
De acuerdo, la primera intuición está aquí:
handlers = java.util.logging.FileHandler, java.util.logging.ConsoleHandler
.level = ALL
El analizador de archivos prop de Java no es tan inteligente, no estoy seguro de que lo haga. Pero iré a ver los documentos otra vez ...
Mientras tanto, intente:
handlers = java.util.logging.FileHandler
java.util.logging.ConsoleHandler.level = ALL
Actualizar
No, duh, necesitaba más café. No importa.
Mientras pienso más, tenga en cuenta que puede usar los métodos en Properties para cargar e imprimir un archivo prop: podría valer la pena escribir un programa mínimo para ver qué java piensa que lee en ese archivo.
Otra actualización
Esta línea:
FileInputStream configFile = new FileInputStream("/path/to/app.properties"));
tiene un final extra-paren. No compilará Asegúrate de estar trabajando con el archivo de clase que crees que eres.
He intentado tu código en el código anterior. No utilices la instrucción [preferences.load (configFile);] y funcionará. Allí está ejecutando el código de muestra.
public static void main(String[]s)
{
Logger log = Logger.getLogger("MyClass");
try {
FileInputStream fis = new FileInputStream("p.properties");
LogManager.getLogManager().readConfiguration(fis);
log.setLevel(Level.FINE);
log.addHandler(new java.util.logging.ConsoleHandler());
log.setUseParentHandlers(false);
log.info("starting myApp");
fis.close();
}
catch(IOException e) {
e.printStackTrace();
}
}
puede establecer su archivo de configuración de registro a través de la línea de comando:
$ java -Djava.util.logging.config.file=/path/to/app.properties MainClass
de esta manera parece más limpio y más fácil de mantener.
Logger log = Logger.getLogger("myApp");
log.setLevel(Level.ALL);
log.info("initializing - trying to load configuration file ...");
//Properties preferences = new Properties();
try {
//FileInputStream configFile = new //FileInputStream("/path/to/app.properties");
//preferences.load(configFile);
InputStream configFile = myApp.class.getResourceAsStream("app.properties");
LogManager.getLogManager().readConfiguration(configFile);
} catch (IOException ex)
{
System.out.println("WARNING: Could not open configuration file");
System.out.println("WARNING: Logging not configured (console output only)");
}
log.info("starting myApp");
esto está funcionando ... :) tienes que pasar InputStream en readConfiguration ().