Printing java logger configuration
December 10, 2009 Leave a comment
I have been wondering for some time how to print out a list with details how loggers were configured.
In order to work, one requires to create at least one logger instance of each logger that shall be listed.
I will provide further details in future.
public void print(PrintStream out) { out.println("Configuração de log: "); LogManager logManager = LogManager.getLogManager(); Enumeration<String> loggerNames = logManager.getLoggerNames(); Set<String> names = new TreeSet<String>(); Set<Handler> handlerSet = new HashSet<Handler>(); while (loggerNames.hasMoreElements()) { String name = loggerNames.nextElement(); names.add(name); } for (String name : names) { Logger logger = logManager.getLogger(name); String nome = logger.getName(); if (nome.length() == 0) nome = "<root>"; // boolean inheritedLevel = false; Level level = logger.getLevel(); // boolean inheritedHandler = false; Handler[] handlers = logger.getHandlers(); Logger parentLevelLogger = null; if (level == null) { parentLevelLogger = logger.getParent(); while (parentLevelLogger != null && level == null) { Level parentLevel = parentLevelLogger.getLevel(); if (parentLevel != null) { level = parentLevel; } else { parentLevelLogger = parentLevelLogger.getParent(); } } } Logger parentHandlerLogger = null; if (handlers == null) { parentHandlerLogger = logger.getParent(); while (parentHandlerLogger != null && handlers == null) { Handler[] parentHandlers = parentHandlerLogger.getHandlers(); if (parentHandlers != null) { handlers = parentHandlers; } else { parentHandlerLogger = parentHandlerLogger.getParent(); } } } String nivel = "?"; if (level != null) nivel = level.getName(); if (parentLevelLogger != null) { if (parentLevelLogger.getName().length() == 0) nivel = "<root>:"+nivel; else nivel = parentLevelLogger.getName()+":"+nivel; } String lista = "?"; if (handlers != null) { List<Handler> list = Arrays.asList(handlers); if (list.size() == 0) { lista = ""; } else { lista = null; for (Handler handler : list) { if (lista == null) lista = handler.getClass().getName(); else lista += ", " + handler.getClass().getSimpleName(); } } } if (parentHandlerLogger != null) { if (parentHandlerLogger.getName().length() == 0) nivel = "<root>:"+lista; else nivel = parentHandlerLogger.getName()+":"+lista; } out.format(" - %s (%s): %s\n", nome, nivel, lista); } for (Handler handler : handlerSet) { String nome = handler.getClass().getSimpleName(); String nivel = handler.getLevel().getName(); out.format(" - %s (%s)\n", nome, nivel); } }