Comment configurer la journalisation java à l'aide d'un fichier de propriétés? (Java.util.journalisation)


J'ai un problème de journalisation java stupide: je charge la configuration de journalisation à partir du fichier de configuration de mon application - mais il ne consigne tout simplement rien après avoir lu le fichier (ce qui ressemble à peu près aux exemples que vous trouverez sur le net sauf pour la configuration d'application supplémentaire - supprimer cela n'aide pas non plus). Le "cours d'initialisation..."la ligne de journal apparaît très bien, mais "l'application de démarrage" et tous les autres messages ne sont ni enregistrés dans la console, ni le fichier journal n'est jamais créé. 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 c'est 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
Author: VolkA, 2009-06-06

5 answers

D'accord, la première intuition est ici:

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

L'analyseur de fichiers Java prop n'est pas si intelligent, je ne suis pas sûr qu'il va gérer cela. Mais je vais regarder les documents à nouveau....

En attendant, essayez:

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

Mise à jour

Non, duh, il fallait plus de café. Nevermind.

Bien que je pense plus, notez que vous pouvez utiliser les méthodes dans Properties pour charger et imprimer un fichier prop: cela pourrait valoir la peine d'écrire un programme minimal pour voir ce que java pense lire ce fichier.


Une autre mise à jour

Cette ligne:

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

A un paren d'extrémité supplémentaire. Il ne compile pas. Assurez-vous que vous travaillez avec le fichier de classe que vous pensez être.

 23
Author: Charlie Martin, 2009-06-06 17:15:39

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.

 83
Author: cd1, 2016-01-25 00:17:40

J'ai essayé votre code dans le code ci-dessus ne pas utiliser [préférence.chargement (configFile);] déclaration et cela fonctionnera.voici un exemple de code 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
Author: Rana, 2013-07-30 14:09:12
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 ().

 6
Author: Vikky Kumar, 2016-01-05 07:04:39

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

Ici %h se résout dans votre maison: Dans Windows, cette valeur par défaut est : C:\Documents et paramètres (nom_utilisateur).

J'ai essayé l'exemple de code que vous avez posté et cela fonctionne bien après avoir spécifié le chemin du fichier de configuration (journalisation.propriétés via du code ou des arguments java).

 3
Author: techzen, 2009-08-17 10:33:51