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