package org.ops4j.pax.exam.karaf.container.internal; import java.util.Map; import java.util.Properties; /** * Identifies and handles the possible logging backends used by Karaf. */ enum LoggingBackend { LOG4J { @Override void updatePaxLoggingConfiguration(Properties karafPropertyFile, String realLogLevel) { karafPropertyFile.put("log4j.rootLogger", realLogLevel + ", out, stdout, osgi:*"); } }, LOG4J2 { @Override void updatePaxLoggingConfiguration(Properties karafPropertyFile, String realLogLevel) { // Change the root logging level to that specified by the test environment karafPropertyFile.put("log4j2.rootLogger.level", realLogLevel); // Look for an existing console appender String consoleAppenderName = null; for (Map.Entry<Object, Object> property : karafPropertyFile.entrySet()) { String propertyValue = property.getValue().toString(); if (propertyValue.equals("Console")) { String propertyName = property.getKey().toString(); if (propertyName.matches("log4j2\\.appender\\.[^\\.]+\\.type")) { consoleAppenderName = karafPropertyFile.getProperty(propertyName.replaceAll(".type", ".name")); break; } } } if (consoleAppenderName != null && consoleAppenderName.length() > 0) { boolean rootLoggerHasConsoleAppender = false; for (Map.Entry<Object, Object> property : karafPropertyFile.entrySet()) { String propertyValue = property.getValue().toString(); if (propertyValue.equals(consoleAppenderName)) { String propertyName = property.getKey().toString(); if (propertyName.matches("log4j2\\.rootLogger\\.appenderRef\\.[^\\.]+\\.ref")) { rootLoggerHasConsoleAppender = true; break; } } } if (!rootLoggerHasConsoleAppender) { karafPropertyFile.put("log4j2.rootLogger.appenderRef." + consoleAppenderName + ".ref", consoleAppenderName); } } } }; abstract void updatePaxLoggingConfiguration(Properties karafPropertyFile, String realLogLevel); }