Comment puis-je désactiver le gestionnaire de console par défaut lors de l’utilisation de l’API de journalisation Java?

Bonjour, j’essaie d’implémenter la journalisation Java dans mon application. Je veux utiliser deux gestionnaires. Un gestionnaire de fichiers et mon propre gestionnaire de console. Mes deux gestionnaires travaillent bien. Mon enregistrement est envoyé à un fichier et à la console. Mon enregistrement est également envoyé au gestionnaire de console par défaut, ce que je ne veux pas. Si vous exécutez mon code, vous verrez deux lignes supplémentaires envoyées à la console. Je ne veux pas utiliser le gestionnaire de console par défaut. Est-ce que quelqu’un sait comment désactiver le gestionnaire de console par défaut. Je veux seulement utiliser les deux gestionnaires que j’ai créés.

Handler fh = new FileHandler("test.txt"); fh.setFormatter(formatter); logger.addHandler(fh); 

 Handler ch = new ConsoleHandler(); ch.setFormatter(formatter); logger.addHandler(ch); 

 import java.util.Date; import java.util.logging.ConsoleHandler; import java.util.logging.FileHandler; import java.util.logging.Formatter; import java.util.logging.Handler; import java.util.logging.Level; import java.util.logging.LogManager; import java.util.logging.LogRecord; import java.util.logging.Logger; public class LoggingExample { private static Logger logger = Logger.getLogger("test"); static { try { logger.setLevel(Level.INFO); Formatter formatter = new Formatter() { @Override public Ssortingng format(LogRecord arg0) { SsortingngBuilder b = new SsortingngBuilder(); b.append(new Date()); b.append(" "); b.append(arg0.getSourceClassName()); b.append(" "); b.append(arg0.getSourceMethodName()); b.append(" "); b.append(arg0.getLevel()); b.append(" "); b.append(arg0.getMessage()); b.append(System.getProperty("line.separator")); return b.toSsortingng(); } }; Handler fh = new FileHandler("test.txt"); fh.setFormatter(formatter); logger.addHandler(fh); Handler ch = new ConsoleHandler(); ch.setFormatter(formatter); logger.addHandler(ch); LogManager lm = LogManager.getLogManager(); lm.addLogger(logger); } catch (Throwable e) { e.printStackTrace(); } } public static void main(Ssortingng[] args) { logger.info("why does my test application use the standard console logger ?\n" + " I want only my console handler (Handler ch)\n " + "how can i turn the standard logger to the console off. ??"); } } 

    Le gestionnaire de console par défaut est attaché à l’enregistreur racine, qui est le parent de tous les autres consignateurs, y compris le vôtre. Donc, je vois deux façons de résoudre votre problème:

    Si cela ne concerne que votre classe, la solution la plus simple serait de désactiver la transmission des journaux au journal parent:

     logger.setUseParentHandlers(false); 

    Si vous souhaitez modifier ce comportement pour l’ensemble de votre application, vous pouvez supprimer le gestionnaire de console par défaut du journal racine avant d’append vos propres gestionnaires:

     Logger globalLogger = Logger.getLogger("global"); Handler[] handlers = globalLogger.getHandlers(); for(Handler handler : handlers) { globalLogger.removeHandler(handler); } 

    Remarque: si vous souhaitez utiliser les mêmes gestionnaires de journaux dans d’autres classes, le meilleur moyen consiste à déplacer la configuration du journal dans un fichier de configuration à long terme.

    Juste faire

     LogManager.getLogManager().reset(); 

    Ceci est étrange mais Logger.getLogger("global") ne fonctionne pas dans ma configuration (ainsi que Logger.getLogger(Logger.GLOBAL_LOGGER_NAME) ).

    Cependant, Logger.getLogger("") fait bien le travail.

    J’espère que cette information aide aussi quelqu’un …

    Effectuez une réinitialisation de la configuration et définissez le niveau racine sur OFF

     LogManager.getLogManager().reset(); Logger globalLogger = Logger.getLogger(java.util.logging.Logger.GLOBAL_LOGGER_NAME); globalLogger.setLevel(java.util.logging.Level.OFF); 

    Vous devez indiquer à votre enregistreur de ne pas envoyer ses messages sur son enregistreur parent:

     ... import java.util.logging.*; ... Logger logger = Logger.getLogger(this.getClass().getName()); logger.setUseParentHandlers(false); ... 

    Cependant, cela doit être fait avant d’append d’autres gestionnaires à Logger.