web-dev-qa-db-fra.com

Comment configurer Java en utilisant un fichier de propriétés? (Java.util.logging)

J'ai un stupide Java: je charge la configuration de journalisation à partir de mon fichier de configuration d'application - mais cela ne consigne rien après la lecture du fichier (ce qui ressemble assez aux exemples vous trouverez sur le net, à l'exception de la configuration supplémentaire de l'application (la suppression de cette information n'aide également pas.) La ligne de journal "d'initialisation ..." apparaît parfaitement, mais "l'application de démarrage" et tous les autres messages ne sont pas enregistrés dans le journal. console, le fichier journal n’a jamais été créé. Qu'est-ce qui me manque ici?

Le code de l'enregistreur ressemble à ceci:

...
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");
...

Et voici le fichier de configuration:

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
77
VolkA

Ok, la première intuition est ici:

handlers = Java.util.logging.FileHandler, Java.util.logging.ConsoleHandler
.level = ALL

L’analyseur de fichier prop Java prop n’est pas très intelligent, je ne suis pas sûr qu’il résoudra ce problème. Mais j’irai à nouveau examiner la documentation ....

En attendant, essayez:

handlers = Java.util.logging.FileHandler
Java.util.logging.ConsoleHandler.level = ALL

Mise à jour

Non, duh, j'avais besoin de plus de café. Ça ne fait rien.

Bien que je pense plus, notez que vous pouvez utiliser les méthodes de Propriétés pour charger et imprimer un fichier prop: il pourrait être intéressant d'écrire un programme minimal pour voir ce que Java = pense qu'il se lit dans ce fichier.


Une autre mise à jour

Cette ligne:

    FileInputStream configFile = new FileInputStream("/path/to/app.properties"));

a un extra fin paren. Ça ne compilera pas. Assurez-vous de travailler avec le fichier de classe que vous pensez être.

25
Charlie Martin

vous pouvez définir votre fichier de configuration de journalisation via la ligne de commande:

$ Java -Djava.util.logging.config.file=/path/to/app.properties MainClass

cette façon semble plus propre et plus facile à entretenir.

89
cd1

J'ai essayé votre code dans le code ci-dessus n'utilisez pas l'instruction [preferences.load (configFile);] et cela fonctionnera. Un exemple de code est en cours d'exécution.

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();
    }
}
12
Rana
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");

cela fonctionne .. :) vous devez passer InputStream dans readConfiguration ().

8
Vikky Kumar

Recherchez-vous le fichier journal dans le bon chemin:% h/one% u.log

Ici,% h résout votre maison: Sous Windows, la valeur par défaut est: C:\Documents and Settings (nom_utilisateur).

J'ai essayé le code exemple que vous avez posté et il fonctionne correctement après avoir spécifié le chemin du fichier de configuration (logging.properties via le code ou Java args).

3
techzen