test/java/lang/management/PlatformLoggingMXBean/LoggingMXBeanTest.java

Print this page

        

*** 34,49 **** import java.lang.management.*; import javax.management.MBeanServer; import java.util.logging.*; import java.util.ArrayList; import java.util.List; public class LoggingMXBeanTest { ! static String LOGGER_NAME_1 = "com.sun.management.Logger"; ! static String LOGGER_NAME_2 = "com.sun.management.Logger.Logger2"; ! static String UNKNOWN_LOGGER_NAME = "com.sun.management.Unknown"; // These instance variables prevent premature logger garbage collection // See getLogger() weak reference warnings. Logger logger1; Logger logger2; --- 34,51 ---- import java.lang.management.*; import javax.management.MBeanServer; import java.util.logging.*; import java.util.ArrayList; import java.util.List; + import java.util.Map; + import java.util.HashMap; public class LoggingMXBeanTest { ! static final String LOGGER_NAME_1 = "com.sun.management.Logger"; ! static final String LOGGER_NAME_2 = "com.sun.management.Logger.Logger2"; ! static final String UNKNOWN_LOGGER_NAME = "com.sun.management.Unknown"; // These instance variables prevent premature logger garbage collection // See getLogger() weak reference warnings. Logger logger1; Logger logger2;
*** 211,237 **** private static void checkAttributes(LoggingMXBean mxbean1, PlatformLoggingMXBean mxbean2) { // verify logger names List<String> loggers1 = mxbean1.getLoggerNames(); List<String> loggers2 = mxbean2.getLoggerNames(); if (loggers1.size() != loggers2.size()) throw new RuntimeException("LoggerNames: unmatched number of entries"); ! List<String> loggers3 = new ArrayList<>(loggers1); ! loggers3.removeAll(loggers2); ! if (loggers3.size() != 0) throw new RuntimeException("LoggerNames: unmatched loggers"); // verify logger's level and parent for (String logger : loggers1) { ! if (!mxbean1.getLoggerLevel(logger) ! .equals(mxbean2.getLoggerLevel(logger))) throw new RuntimeException( "LoggerLevel: unmatched level for " + logger ! + ", " + mxbean1.getLoggerLevel(logger) ! + ", " + mxbean2.getLoggerLevel(logger)); if (!mxbean1.getParentLoggerName(logger) .equals(mxbean2.getParentLoggerName(logger))) throw new RuntimeException( "ParentLoggerName: unmatched parent logger's name for " + logger); --- 213,251 ---- private static void checkAttributes(LoggingMXBean mxbean1, PlatformLoggingMXBean mxbean2) { // verify logger names List<String> loggers1 = mxbean1.getLoggerNames(); + System.out.println("Loggers: " + loggers1); + + // Retrieve the named loggers to prevent them from being + // spontaneously gc'ed. + Map<String, Logger> loggersMap = new HashMap<>(); + for (String n : loggers1) { + loggersMap.put(n, Logger.getLogger(n)); + } + List<String> loggers2 = mxbean2.getLoggerNames(); + // loggers1 and loggers2 should be identical - no new logger should + // have been created in between (at least no new logger name) + // if (loggers1.size() != loggers2.size()) throw new RuntimeException("LoggerNames: unmatched number of entries"); ! if (!loggers2.containsAll(loggersMap.keySet())) throw new RuntimeException("LoggerNames: unmatched loggers"); + // verify logger's level and parent for (String logger : loggers1) { ! String level1 = mxbean1.getLoggerLevel(logger); ! String level2 = mxbean2.getLoggerLevel(logger); ! if (!java.util.Objects.equals(level1, level2)) { throw new RuntimeException( "LoggerLevel: unmatched level for " + logger ! + ", " + level1 + ", " + level2); ! } if (!mxbean1.getParentLoggerName(logger) .equals(mxbean2.getParentLoggerName(logger))) throw new RuntimeException( "ParentLoggerName: unmatched parent logger's name for " + logger);