85 votes

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

Je vais avoir un stupide journalisation java problème: je suis le chargement de la configuration de l'enregistrement de mon fichier de configuration de l'application - mais il n'a tout simplement pas se connecter quoi que ce soit après la lecture du fichier (qui ressemble plutôt les exemples que vous trouverez sur le net, sauf pour la nouvelle configuration de l'application - la suppression de ce aussi n'aide pas). Le "initialisation..." ligne de journal s'affiche bien, mais le "démarrage de l'application" et d'autres messages ne sont ni connecté à la console, ni le fichier de log jamais créé. Ce qui me manque ici?

L'Enregistreur de code 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

106voto

cd1 Points 2661

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

$ java -Djava.util.logging.config.file = / chemin / vers / app.properties MainClass

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

29voto

Charlie Martin Points 62306

Bon, d'abord l'intuition est ici:

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

La Java prop analyseur de fichier n'est pas intelligent, je ne suis pas sûr que ça va gérer cela. Mais je vais aller regarder les docs de nouveau....

Dans le même temps, essayez de:

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


Mise à jour

Non, duh, besoin de plus de café. Nevermind.

Pendant que j'y pense plus, notez que vous pouvez utiliser les méthodes dans les Propriétés de charger et d'imprimer une prop-fichier: il pourrait être intéressant d'écrire un programme minimal pour voir ce que java pense qu'il lit dans ce fichier.


Une autre mise à jour

Cette ligne:

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

a un supplément de fin de parenthèse. Il ne compile pas. Assurez-vous que vous travaillez avec le fichier de classe vous pensez que vous êtes.

13voto

Rana Points 131

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

3voto

techzen Points 1165

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 publié et il fonctionne correctement après avoir spécifié le chemin du fichier de configuration (logging.properties via le code ou les arguments java).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X