49 votes

java.util.la journalisation.Enregistreur de ne pas respecter le java.util.la journalisation.Niveau?

Dans la plaine de Java SE 6 de l'environnement:

Logger l = Logger.getLogger("nameless");
l.setLevel(Level.ALL);
l.fine("somemessage");

Rien ne s'affiche dans l'Éclipse de la console. l.info("") et ci-dessus fonctionne très bien, mais rien en dessous de l'amende juste ne semble pas fonctionner. Ce qui est peut-être erroné? TIA.

55voto

Kevin Points 19613

Même si l'Enregistreur est réglé à TOUS, le ConsoleHandler (le Gestionnaire par défaut sur l'enregistreur) a encore un défaut au niveau de l'INFO. Cela vient de la journalisation par défaut.propriétés *JAVA_HOME/jre/lib*

35voto

michel.iamit Points 1542

En lieu et place d'une boucle dans tous les maîtres-chiens et de définir le niveau de journalisation, je préfère définir le niveau de la console du gestionnaire:

    //get the top Logger:
    Logger topLogger = java.util.logging.Logger.getLogger("");

    // Handler for console (reuse it if it already exists)
    Handler consoleHandler = null;
    //see if there is already a console handler
    for (Handler handler : topLogger.getHandlers()) {
        if (handler instanceof ConsoleHandler) {
            //found the console handler
            consoleHandler = handler;
            break;
        }
    }


    if (consoleHandler == null) {
        //there was no console handler found, create a new one
        consoleHandler = new ConsoleHandler();
        topLogger.addHandler(consoleHandler);
    }
    //set the console handler to fine:
    consoleHandler.setLevel(java.util.logging.Level.FINEST);

17voto

jwmajors81 Points 695

Une individuels sur mon lieu de travail de faire les constatations suivantes au travail:

public class Foo {
    private final static Logger logger = Logger.getLogger(Foo.class.getName());
    public static final void main(String[] args) {
        ConsoleHandler ch = new ConsoleHandler();
        ch.setLevel(Level.FINEST);
        Foo.logger.addHandler(ch);
        Foo.logger.setLevel(Level.FINEST);
        Foo.logger.finest("test");
    }
}

Si vous venez de définir la racine ou le gestionnaire de meilleurs (exclusivement) alors il ne fonctionne pas. Lorsque j'ai mis les deux à l' FINEST , alors il fonctionne. Son explication était:

À la fois l'instrument et ses gestionnaires ont des Niveaux de Journal... L'ordre de filtrage est Logger puis des Gestionnaires. Cela signifie qu'il vérifie si le message du journal passe les enregistreurs de filtre d'abord, puis envoie le message à la personne des gestionnaires pour le filtrage.

Il a en outre expliqué à l'aide des exemples suivants:

  • Logger myLogger a un niveau d' FINEST et un seul ConsoleHandler myHandler qui ont un niveau d' INFO

  • myLogger.fine("foo") à message fait-il passé à l'enregistreur de données du filtre, mais se fait stopper par le gestionnaire du filtre... Rien de sortie.

  • myLogger.info("foo") passe à la fois de filtres et d' foo est de sortie.

Maintenant...

  • Logger myLogger a un niveau d' INFO et un seul ConsoleHandler myHandler qui ont un niveau d' FINEST

  • myLogger.fine("foo") à message est arrêté par l'enregistreur de filtre et ne se rend jamais au gestionnaire de... Rien en sortie.

  • myLogger.info("foo") passe à la fois de filtres et d' foo est de sortie.

Maintenant...

  • Logger myLogger a un niveau d' FINEST et un seul ConsoleHandler myHandler qui ont un niveau d' FINEST

  • myLogger.fine("foo") passe à la fois des filtres et des "foo" est sortie.

  • myLogger.info("foo") passe à la fois de filtres et d' foo est de sortie.

2voto

Whome Points 2303

D'autres utilisateurs ont déjà donné la bonne réponse pourquoi c'est arrivé (ConsoleHandler a une variable de niveau). - Je réutiliser mon application enregistreur de niveau et le copier à la mère hiérarchique. Aussi fournit un moyen facile pour actualiser les niveaux lors de l'exécution en tout temps que je veux.

// Set same level all loggers and handlers up to the parent level
// OFF,SEVERE,WARNING,INFO,CONFIG,FINE,FINER,FINEST,ALL
Logger logger = Logger.getLogger(this.getClass().getPackage().getName());
//Level level = Level.parse("FINEST");
Level level = logger.getLevel();
Logger tempLogger = logger;
while(tempLogger != null) {
   tempLogger.setLevel(level);
   for(Handler handler : tempLogger.getHandlers())
      handler.setLevel(level);
   tempLogger = tempLogger.getParent();
}

1voto

d3rbastl3r Points 11
private final static Logger LOGGER = Logger.getLogger(WoTServer.class.getName());
for(Handler h : LOGGER.getParent().getHandlers()){
    if(h instanceof ConsoleHandler){
        h.setLevel(Level.ALL);
    }
} 

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