Browse Source

Configure test logging with Log4j 2

This commit configures test logging for Log4j 2. The default logger
configuration uses the console appender but at the error level, so most
tests are missing logging. Instead, this commit provides a configuration
for tests which is picked up from the classpath by Log4j 2 when it
initializes. However, this now means that we can no longer initialize
Log4j with a bare-bones configuration when tests run as doing so will
prevent Log4j 2 from attempting to configure logging via the
classpath. Consequently, we move this needed initialization (as
commented, to avoid a message about a status logger not being configured
when we are preparing to configure Log4j from properties files in the
config directory) to only run when we are explicitly configuring Log4j
from properties files.

Relates #20284
Jason Tedor 9 years ago
parent
commit
1e80adbfbe

+ 5 - 13
core/src/main/java/org/elasticsearch/common/logging/LogConfigurator.java

@@ -50,24 +50,16 @@ import java.util.Set;
 
 public class LogConfigurator {
 
-    static {
-        // we initialize the status logger immediately otherwise Log4j will complain when we try to get the context
-        final ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
-        builder.setStatusLevel(Level.ERROR);
-        Configurator.initialize(builder.build());
-    }
-
-    /**
-     * for triggering class initialization
-     */
-    public static void init() {
-    }
-
     public static void configure(final Environment environment, final boolean resolveConfig) throws IOException {
         final Settings settings = environment.settings();
 
         setLogConfigurationSystemProperty(environment, settings);
 
+        // we initialize the status logger immediately otherwise Log4j will complain when we try to get the context
+        final ConfigurationBuilder<BuiltConfiguration> builder = ConfigurationBuilderFactory.newConfigurationBuilder();
+        builder.setStatusLevel(Level.ERROR);
+        Configurator.initialize(builder.build());
+
         final LoggerContext context = (LoggerContext) LogManager.getContext(false);
 
         if (resolveConfig) {

+ 0 - 5
core/src/main/java/org/elasticsearch/common/logging/Loggers.java

@@ -43,11 +43,6 @@ import static org.elasticsearch.common.util.CollectionUtils.asArrayList;
  */
 public class Loggers {
 
-    static {
-        // ensure that the status logger is configured before we touch any loggers
-        LogConfigurator.init();
-    }
-
     private static final String commonPrefix = System.getProperty("es.logger.prefix", "org.elasticsearch.");
 
     public static final String SPACE = " ";

+ 0 - 2
test/framework/src/main/java/org/elasticsearch/bootstrap/BootstrapForTesting.java

@@ -65,8 +65,6 @@ public class BootstrapForTesting {
     // without making things complex???
 
     static {
-        LogConfigurator.init();
-
         // make sure java.io.tmpdir exists always (in case code uses it in a static initializer)
         Path javaTmpDir = PathUtils.get(Objects.requireNonNull(System.getProperty("java.io.tmpdir"),
                                                                "please set ${java.io.tmpdir} in pom.xml"));

+ 0 - 9
test/framework/src/main/resources/log4j.properties

@@ -1,9 +0,0 @@
-tests.es.logger.level=INFO
-log4j.rootLogger=${tests.es.logger.level}, out
-
-log4j.logger.org.apache.http=INFO, out
-log4j.additivity.org.apache.http=false
-
-log4j.appender.out=org.apache.log4j.ConsoleAppender
-log4j.appender.out.layout=org.apache.log4j.PatternLayout
-log4j.appender.out.layout.conversionPattern=[%d{ISO8601}][%-5p][%-25c] %m%n

+ 9 - 0
test/framework/src/main/resources/log4j2-test.properties

@@ -0,0 +1,9 @@
+status = error
+
+appender.console.type = Console
+appender.console.name = console
+appender.console.layout.type = PatternLayout
+appender.console.layout.pattern = [%d{ISO8601}][%-5p][%-25c] %m%n
+
+rootLogger.level = info
+rootLogger.appenderRef.console.ref = console

+ 24 - 24
test/framework/src/test/java/org/elasticsearch/test/test/LoggingListenerTests.java

@@ -50,27 +50,27 @@ public class LoggingListenerTests extends ESTestCase {
         Logger xyzLogger = Loggers.getLogger("xyz");
         Logger abcLogger = Loggers.getLogger("abc");
 
-        assertEquals(Level.ERROR, abcLogger.getLevel());
-        assertThat(xyzLogger.getLevel(), equalTo(Level.ERROR));
-        assertThat(abcLogger.getLevel(), equalTo(Level.ERROR));
+        assertEquals(Level.INFO, abcLogger.getLevel());
+        assertThat(xyzLogger.getLevel(), equalTo(Level.INFO));
+        assertThat(abcLogger.getLevel(), equalTo(Level.INFO));
         loggingListener.testRunStarted(suiteDescription);
-        assertThat(xyzLogger.getLevel(), equalTo(Level.ERROR));
-        assertThat(abcLogger.getLevel(), equalTo(Level.ERROR));
+        assertThat(xyzLogger.getLevel(), equalTo(Level.INFO));
+        assertThat(abcLogger.getLevel(), equalTo(Level.INFO));
 
         Method method = TestClass.class.getMethod("annotatedTestMethod");
         TestLogging annotation = method.getAnnotation(TestLogging.class);
         Description testDescription = Description.createTestDescription(LoggingListenerTests.class, "annotatedTestMethod", annotation);
         loggingListener.testStarted(testDescription);
         assertThat(xyzLogger.getLevel(), equalTo(Level.TRACE));
-        assertThat(abcLogger.getLevel(), equalTo(Level.ERROR));
+        assertThat(abcLogger.getLevel(), equalTo(Level.INFO));
 
         loggingListener.testFinished(testDescription);
-        assertThat(xyzLogger.getLevel(), equalTo(Level.ERROR));
-        assertThat(abcLogger.getLevel(), equalTo(Level.ERROR));
+        assertThat(xyzLogger.getLevel(), equalTo(Level.INFO));
+        assertThat(abcLogger.getLevel(), equalTo(Level.INFO));
 
         loggingListener.testRunFinished(new Result());
-        assertThat(xyzLogger.getLevel(), equalTo(Level.ERROR));
-        assertThat(abcLogger.getLevel(), equalTo(Level.ERROR));
+        assertThat(xyzLogger.getLevel(), equalTo(Level.INFO));
+        assertThat(abcLogger.getLevel(), equalTo(Level.INFO));
     }
 
     public void testCustomLevelPerClass() throws Exception {
@@ -81,24 +81,24 @@ public class LoggingListenerTests extends ESTestCase {
         Logger abcLogger = Loggers.getLogger("abc");
         Logger xyzLogger = Loggers.getLogger("xyz");
 
-        assertThat(xyzLogger.getLevel(), equalTo(Level.ERROR));
-        assertThat(abcLogger.getLevel(), equalTo(Level.ERROR));
+        assertThat(xyzLogger.getLevel(), equalTo(Level.INFO));
+        assertThat(abcLogger.getLevel(), equalTo(Level.INFO));
         loggingListener.testRunStarted(suiteDescription);
-        assertThat(xyzLogger.getLevel(), equalTo(Level.ERROR));
+        assertThat(xyzLogger.getLevel(), equalTo(Level.INFO));
         assertThat(abcLogger.getLevel(), equalTo(Level.WARN));
 
         Description testDescription = Description.createTestDescription(LoggingListenerTests.class, "test");
         loggingListener.testStarted(testDescription);
-        assertThat(xyzLogger.getLevel(), equalTo(Level.ERROR));
+        assertThat(xyzLogger.getLevel(), equalTo(Level.INFO));
         assertThat(abcLogger.getLevel(), equalTo(Level.WARN));
 
         loggingListener.testFinished(testDescription);
-        assertThat(xyzLogger.getLevel(), equalTo(Level.ERROR));
+        assertThat(xyzLogger.getLevel(), equalTo(Level.INFO));
         assertThat(abcLogger.getLevel(), equalTo(Level.WARN));
 
         loggingListener.testRunFinished(new Result());
-        assertThat(xyzLogger.getLevel(), equalTo(Level.ERROR));
-        assertThat(abcLogger.getLevel(), equalTo(Level.ERROR));
+        assertThat(xyzLogger.getLevel(), equalTo(Level.INFO));
+        assertThat(abcLogger.getLevel(), equalTo(Level.INFO));
     }
 
     public void testCustomLevelPerClassAndPerMethod() throws Exception {
@@ -109,10 +109,10 @@ public class LoggingListenerTests extends ESTestCase {
         Logger abcLogger = Loggers.getLogger("abc");
         Logger xyzLogger = Loggers.getLogger("xyz");
 
-        assertThat(xyzLogger.getLevel(), equalTo(Level.ERROR));
-        assertThat(abcLogger.getLevel(), equalTo(Level.ERROR));
+        assertThat(xyzLogger.getLevel(), equalTo(Level.INFO));
+        assertThat(abcLogger.getLevel(), equalTo(Level.INFO));
         loggingListener.testRunStarted(suiteDescription);
-        assertThat(xyzLogger.getLevel(), equalTo(Level.ERROR));
+        assertThat(xyzLogger.getLevel(), equalTo(Level.INFO));
         assertThat(abcLogger.getLevel(), equalTo(Level.WARN));
 
         Method method = TestClass.class.getMethod("annotatedTestMethod");
@@ -123,7 +123,7 @@ public class LoggingListenerTests extends ESTestCase {
         assertThat(abcLogger.getLevel(), equalTo(Level.WARN));
 
         loggingListener.testFinished(testDescription);
-        assertThat(xyzLogger.getLevel(), equalTo(Level.ERROR));
+        assertThat(xyzLogger.getLevel(), equalTo(Level.INFO));
         assertThat(abcLogger.getLevel(), equalTo(Level.WARN));
 
         Method method2 = TestClass.class.getMethod("annotatedTestMethod2");
@@ -134,12 +134,12 @@ public class LoggingListenerTests extends ESTestCase {
         assertThat(abcLogger.getLevel(), equalTo(Level.TRACE));
 
         loggingListener.testFinished(testDescription2);
-        assertThat(xyzLogger.getLevel(), equalTo(Level.ERROR));
+        assertThat(xyzLogger.getLevel(), equalTo(Level.INFO));
         assertThat(abcLogger.getLevel(), equalTo(Level.WARN));
 
         loggingListener.testRunFinished(new Result());
-        assertThat(xyzLogger.getLevel(), equalTo(Level.ERROR));
-        assertThat(abcLogger.getLevel(), equalTo(Level.ERROR));
+        assertThat(xyzLogger.getLevel(), equalTo(Level.INFO));
+        assertThat(abcLogger.getLevel(), equalTo(Level.INFO));
     }
 
     /**