expectations = new ArrayList<>();
private TestAppender currentAppender;
- private ExpectedLog4jLog() {
+ private ExpectedLog4jLog(String loggerName) {
+ this.loggerName = loggerName;
}
@Override
@@ -56,7 +68,7 @@ public Statement apply(Statement base, org.junit.runner.Description description)
*
* Defaults to expecting the event once or more.
*/
- public LogExpectation expectEvent(Matcher extends LoggingEvent> matcher) {
+ public LogExpectation expectEvent(Matcher extends LogEvent> matcher) {
LogExpectation expectation = new LogExpectation( matcher );
expectations.add( expectation );
if ( currentAppender != null ) {
@@ -84,7 +96,7 @@ public LogExpectation expectEvent(Level level,
* @deprecated Use {@code expectEvent( matcher ).never() }
*/
@Deprecated
- public void expectEventMissing(Matcher extends LoggingEvent> matcher) {
+ public void expectEventMissing(Matcher extends LogEvent> matcher) {
expectEvent( matcher ).never();
}
@@ -165,88 +177,51 @@ private Matcher containsAllStrings(String containedString, String... oth
return CoreMatchers.allOf( matchers );
}
- private Matcher eventLevelMatcher(Level level) {
- return new TypeSafeMatcher() {
+ private Matcher eventLevelMatcher(Level level) {
+ return new TypeSafeMatcher() {
@Override
public void describeTo(Description description) {
- description.appendText( "a LoggingEvent with " ).appendValue( level ).appendText( " level or higher" );
+ description.appendText( "a LogEvent with " ).appendValue( level ).appendText( " level or higher" );
}
+
@Override
- protected boolean matchesSafely(LoggingEvent item) {
- return item.getLevel().isGreaterOrEqual( level );
+ protected boolean matchesSafely(LogEvent item) {
+ return item.getLevel().isMoreSpecificThan( level );
}
};
}
- private Matcher eventThrowableMatcher(Matcher super Throwable> throwableMatcher) {
- return new TypeSafeMatcher() {
+ private Matcher eventThrowableMatcher(Matcher super Throwable> throwableMatcher) {
+ return new TypeSafeMatcher() {
@Override
public void describeTo(Description description) {
- description.appendText( "a LoggingEvent with throwable " ).appendValue( throwableMatcher );
+ description.appendText( "a LogEvent with throwable " ).appendValue( throwableMatcher );
}
+
@Override
- protected boolean matchesSafely(LoggingEvent item) {
- ThrowableInformation throwableInfo = item.getThrowableInformation();
- return throwableMatcher.matches( throwableInfo == null ? null : throwableInfo.getThrowable() );
+ protected boolean matchesSafely(LogEvent item) {
+ Throwable throwable = item.getThrown();
+ return throwableMatcher.matches( throwable == null ? null : throwable );
}
};
}
- private Matcher eventMessageMatcher(final Matcher messageMatcher) {
- return new TypeSafeMatcher() {
+ private Matcher eventMessageMatcher(final Matcher messageMatcher) {
+ return new TypeSafeMatcher() {
@Override
public void describeTo(Description description) {
- description.appendText( "a LoggingEvent with message matching " );
+ description.appendText( "a LogEvent with message matching " );
messageMatcher.describeTo( description );
}
@Override
- protected boolean matchesSafely(LoggingEvent item) {
- return messageMatcher.matches( item.getMessage() );
+ protected boolean matchesSafely(LogEvent item) {
+ return messageMatcher.matches( item.getMessage().getFormattedMessage() );
}
};
}
- private class TestAppender extends AppenderSkeleton {
- private final List checkers;
-
- private TestAppender() {
- this.checkers = new ArrayList<>();
- }
-
- void addChecker(LogChecker checker) {
- checkers.add( checker );
- }
-
- @Override
- public void close() {
- // Nothing to clean up
- }
-
- @Override
- public boolean requiresLayout() {
- return false;
- }
-
- @Override
- protected void append(LoggingEvent event) {
- for ( LogChecker checker : checkers ) {
- checker.process( event );
- }
- }
-
- Set getFailingCheckers() {
- Set failingCheckers = new HashSet<>();
- for ( LogChecker checker : checkers ) {
- if ( !checker.areExpectationsMet() ) {
- failingCheckers.add( checker );
- }
- }
- return failingCheckers;
- }
- }
-
private class ExpectedLogStatement extends Statement {
private final Statement next;
@@ -257,18 +232,19 @@ private class ExpectedLogStatement extends Statement {
@Override
public void evaluate() throws Throwable {
- final Logger logger = Logger.getRootLogger();
- TestAppender appender = new TestAppender();
+ Log4j2ConfigurationAccessor programmaticConfig = new Log4j2ConfigurationAccessor( loggerName );
+ TestAppender appender = new TestAppender( "TestAppender" );
+ programmaticConfig.addAppender( appender );
+
for ( LogExpectation expectation : ExpectedLog4jLog.this.expectations ) {
appender.addChecker( expectation.createChecker() );
}
ExpectedLog4jLog.this.currentAppender = appender;
- logger.addAppender( appender );
try {
next.evaluate();
}
finally {
- logger.removeAppender( appender );
+ programmaticConfig.removeAppender();
}
Set failingCheckers = appender.getFailingCheckers();
if ( !failingCheckers.isEmpty() ) {
@@ -285,98 +261,4 @@ private static String buildFailureMessage(Set failingCheckers) {
}
return description.toString();
}
-
- public static class LogExpectation {
- private final Matcher> matcher;
- private Integer expectedCount;
-
- LogExpectation(Matcher> matcher) {
- this.matcher = matcher;
- }
-
- public void never() {
- times( 0 );
- }
-
- public void once() {
- times( 1 );
- }
-
- public void times(int expectedCount) {
- if ( this.expectedCount != null ) {
- throw new IllegalStateException( "Can only set log expectations once" );
- }
- this.expectedCount = expectedCount;
- }
-
- LogChecker createChecker() {
- return new LogChecker( this );
- }
-
- Matcher> getMatcher() {
- return matcher;
- }
-
- int getMinExpectedCount() {
- return expectedCount == null ? 1 : expectedCount;
- }
-
- Integer getMaxExpectedCount() {
- return expectedCount;
- }
- }
-
- public static class LogChecker {
- private final LogExpectation expectation;
- private int count = 0;
- private List extraEvents;
-
- public LogChecker(LogExpectation expectation) {
- this.expectation = expectation;
- }
-
- void process(LoggingEvent event) {
- if ( expectation.getMaxExpectedCount() == null && expectation.getMinExpectedCount() <= count ) {
- // We don't care about events anymore, expectations are met and it won't change
- return;
- }
- if ( expectation.getMatcher().matches( event ) ) {
- ++count;
- }
- if ( expectation.getMaxExpectedCount() != null && count > expectation.getMaxExpectedCount() ) {
- if ( extraEvents == null ) {
- extraEvents = new ArrayList<>();
- }
- extraEvents.add( event );
- }
- }
-
- boolean areExpectationsMet() {
- return expectation.getMinExpectedCount() <= count
- && ( expectation.getMaxExpectedCount() == null || count <= expectation.getMaxExpectedCount() );
- }
-
- void appendFailure(Description description, String newline) {
- description.appendText( newline );
- if ( count < expectation.getMinExpectedCount() ) {
- description.appendText( "Expected at least " + expectation.getMinExpectedCount() + " time(s) " );
- expectation.getMatcher().describeTo( description );
- description.appendText( " but only got " + count + " such event(s)." );
- }
- if ( expectation.getMaxExpectedCount() != null && expectation.getMaxExpectedCount() < count ) {
- description.appendText( "Expected at most " + expectation.getMaxExpectedCount() + " time(s) " );
- expectation.getMatcher().describeTo( description );
- description.appendText( " but got " + count + " such event(s)." );
- description.appendText( " Extra events: " );
- for ( LoggingEvent extraEvent : extraEvents ) {
- description.appendText( newline );
- description.appendText( "\t - " );
- description.appendText( extraEvent.getRenderedMessage() );
- }
- }
- }
-
-
- }
-
}
diff --git a/engine/src/test/java/org/hibernate/search/test/util/impl/HibernateSearchResourceLoaderTest.java b/engine/src/test/java/org/hibernate/search/test/util/impl/HibernateSearchResourceLoaderTest.java
index 3fb1a1601fe..8ceea8035b6 100644
--- a/engine/src/test/java/org/hibernate/search/test/util/impl/HibernateSearchResourceLoaderTest.java
+++ b/engine/src/test/java/org/hibernate/search/test/util/impl/HibernateSearchResourceLoaderTest.java
@@ -42,7 +42,7 @@ public void setUp() {
@Test
public void testOpenKnownResource() throws Exception {
// using a known resource for testing
- String resource = "log4j.properties";
+ String resource = "log4j2.properties";
InputStream in = resourceLoader.openResource( resource );
String resourceContent = StreamHelper.readInputStream( in );
assertNotNull( resourceContent );
diff --git a/engine/src/test/java/org/hibernate/search/test/util/impl/log4j/Log4j2ConfigurationAccessor.java b/engine/src/test/java/org/hibernate/search/test/util/impl/log4j/Log4j2ConfigurationAccessor.java
new file mode 100644
index 00000000000..f9100b19cdc
--- /dev/null
+++ b/engine/src/test/java/org/hibernate/search/test/util/impl/log4j/Log4j2ConfigurationAccessor.java
@@ -0,0 +1,53 @@
+/*
+ * Hibernate Search, full-text search for your domain model
+ *
+ * License: GNU Lesser General Public License (LGPL), version 2.1 or later
+ * See the lgpl.txt file in the root directory or .
+ */
+package org.hibernate.search.test.util.impl.log4j;
+
+import org.apache.logging.log4j.Level;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.core.Appender;
+import org.apache.logging.log4j.core.LoggerContext;
+import org.apache.logging.log4j.core.config.Configuration;
+import org.apache.logging.log4j.core.config.LoggerConfig;
+
+public class Log4j2ConfigurationAccessor {
+
+ private final LoggerContext context;
+ private final Configuration configuration;
+ private final LoggerConfig logger;
+
+ private Appender appender;
+ private Level originalLoggerLevel;
+
+ public Log4j2ConfigurationAccessor(String loggerName) {
+ context = (LoggerContext) LogManager.getContext( false );
+ configuration = context.getConfiguration();
+ // Make sure the logger exists (this call is ignored if it already exists)
+ configuration.addLogger( loggerName, new LoggerConfig() );
+ logger = configuration.getLoggerConfig( loggerName );
+ }
+
+ public void addAppender(Appender appender) {
+ this.appender = appender;
+ originalLoggerLevel = logger.getLevel();
+
+ logger.addAppender( appender, Level.ALL, null );
+ logger.setLevel( Level.ALL );
+ appender.start();
+ context.updateLoggers();
+ }
+
+ public void removeAppender() {
+ if ( appender == null ) {
+ return;
+ }
+
+ appender.stop();
+ logger.removeAppender( appender.getName() );
+ logger.setLevel( originalLoggerLevel );
+ context.updateLoggers();
+ }
+}
diff --git a/engine/src/test/java/org/hibernate/search/test/util/impl/log4j/LogChecker.java b/engine/src/test/java/org/hibernate/search/test/util/impl/log4j/LogChecker.java
new file mode 100644
index 00000000000..8c51016a7fb
--- /dev/null
+++ b/engine/src/test/java/org/hibernate/search/test/util/impl/log4j/LogChecker.java
@@ -0,0 +1,89 @@
+/*
+ * Hibernate Search, full-text search for your domain model
+ *
+ * License: GNU Lesser General Public License (LGPL), version 2.1 or later
+ * See the lgpl.txt file in the root directory or .
+ */
+package org.hibernate.search.test.util.impl.log4j;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.logging.log4j.core.LogEvent;
+import org.hamcrest.Description;
+
+public class LogChecker {
+
+ private final LogExpectation expectation;
+ private volatile int count = 0;
+ private List matchingEvents;
+ private List extraEvents;
+
+ LogChecker(LogExpectation expectation) {
+ this.expectation = expectation;
+ }
+
+ public void appendFailure(Description description, String newline) {
+ description.appendText( newline );
+ if ( count < expectation.getMinExpectedCount() ) {
+ description.appendText( "Expected at least " + expectation.getMinExpectedCount() + " time(s) " );
+ expectation.getMatcher().describeTo( description );
+ description.appendText( " but only got " + count + " such event(s)." );
+ description.appendText( " Matching events: " );
+ appendEvents( description, newline, matchingEvents );
+ }
+ if ( expectation.getMaxExpectedCount() != null && expectation.getMaxExpectedCount() < count ) {
+ description.appendText( "Expected at most " + expectation.getMaxExpectedCount() + " time(s) " );
+ expectation.getMatcher().describeTo( description );
+ description.appendText( " but got " + count + " such event(s)." );
+ description.appendText( " Extra events: " );
+ appendEvents( description, newline, extraEvents );
+ description.appendText( " Matching events: " );
+ appendEvents( description, newline, matchingEvents );
+ }
+ }
+
+ void process(LogEvent event) {
+ if ( expectation.getMaxExpectedCount() == null && expectation.getMinExpectedCount() <= count ) {
+ // We don't care about events anymore, expectations are met and it won't change
+ return;
+ }
+ if ( expectation.getMatcher().matches( event ) ) {
+ processMatching( event );
+ }
+ }
+
+ // This must be synchronized to avoid problems when multiple threads issue log events concurrently
+ private synchronized void processMatching(LogEvent event) {
+ ++count;
+ if ( expectation.getMaxExpectedCount() != null && count > expectation.getMaxExpectedCount() ) {
+ if ( extraEvents == null ) {
+ extraEvents = new ArrayList<>();
+ }
+ extraEvents.add( event.toImmutable() );
+ }
+ else {
+ if ( matchingEvents == null ) {
+ matchingEvents = new ArrayList<>();
+ }
+ matchingEvents.add( event.toImmutable() );
+ }
+ }
+
+ boolean areExpectationsMet() {
+ return expectation.getMinExpectedCount() <= count
+ && ( expectation.getMaxExpectedCount() == null || count <= expectation.getMaxExpectedCount() );
+ }
+
+ private static void appendEvents(Description description, String newline, List events) {
+ if ( events == null || events.isEmpty() ) {
+ description.appendText( "" );
+ return;
+ }
+ for ( LogEvent event : events ) {
+ description.appendText( newline );
+ description.appendText( "\t - " );
+ description.appendText( event.getMessage().getFormattedMessage() );
+ }
+ }
+}
diff --git a/engine/src/test/java/org/hibernate/search/test/util/impl/log4j/LogExpectation.java b/engine/src/test/java/org/hibernate/search/test/util/impl/log4j/LogExpectation.java
new file mode 100644
index 00000000000..eb09aae3f5f
--- /dev/null
+++ b/engine/src/test/java/org/hibernate/search/test/util/impl/log4j/LogExpectation.java
@@ -0,0 +1,50 @@
+/*
+ * Hibernate Search, full-text search for your domain model
+ *
+ * License: GNU Lesser General Public License (LGPL), version 2.1 or later
+ * See the lgpl.txt file in the root directory or .
+ */
+package org.hibernate.search.test.util.impl.log4j;
+
+import org.hamcrest.Matcher;
+
+public class LogExpectation {
+
+ private final Matcher> matcher;
+ private Integer expectedCount;
+
+ public LogExpectation(Matcher> matcher) {
+ this.matcher = matcher;
+ }
+
+ public void never() {
+ times( 0 );
+ }
+
+ public void once() {
+ times( 1 );
+ }
+
+ public void times(int expectedCount) {
+ if ( this.expectedCount != null ) {
+ throw new IllegalStateException( "Can only set log expectations once" );
+ }
+ this.expectedCount = expectedCount;
+ }
+
+ public LogChecker createChecker() {
+ return new LogChecker( this );
+ }
+
+ Matcher> getMatcher() {
+ return matcher;
+ }
+
+ int getMinExpectedCount() {
+ return expectedCount == null ? 1 : expectedCount;
+ }
+
+ Integer getMaxExpectedCount() {
+ return expectedCount;
+ }
+}
diff --git a/engine/src/test/java/org/hibernate/search/test/util/impl/log4j/TestAppender.java b/engine/src/test/java/org/hibernate/search/test/util/impl/log4j/TestAppender.java
new file mode 100644
index 00000000000..933db02bab3
--- /dev/null
+++ b/engine/src/test/java/org/hibernate/search/test/util/impl/log4j/TestAppender.java
@@ -0,0 +1,46 @@
+/*
+ * Hibernate Search, full-text search for your domain model
+ *
+ * License: GNU Lesser General Public License (LGPL), version 2.1 or later
+ * See the lgpl.txt file in the root directory or .
+ */
+package org.hibernate.search.test.util.impl.log4j;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.appender.AbstractAppender;
+import org.apache.logging.log4j.core.config.Property;
+
+public class TestAppender extends AbstractAppender {
+
+ private final List checkers = new ArrayList<>();
+
+ public TestAppender(String name) {
+ super( name, null, null, true, Property.EMPTY_ARRAY );
+ }
+
+ @Override
+ public void append(LogEvent event) {
+ for ( LogChecker checker : checkers ) {
+ checker.process( event );
+ }
+ }
+
+ public void addChecker(LogChecker checker) {
+ checkers.add( checker );
+ }
+
+ public Set getFailingCheckers() {
+ Set failingCheckers = new HashSet<>();
+ for ( LogChecker checker : checkers ) {
+ if ( !checker.areExpectationsMet() ) {
+ failingCheckers.add( checker );
+ }
+ }
+ return failingCheckers;
+ }
+}
diff --git a/engine/src/test/java/org/hibernate/search/test/util/logging/LoggerInfoStreamTest.java b/engine/src/test/java/org/hibernate/search/test/util/logging/LoggerInfoStreamTest.java
index ba7ae0e571a..593ad030c95 100644
--- a/engine/src/test/java/org/hibernate/search/test/util/logging/LoggerInfoStreamTest.java
+++ b/engine/src/test/java/org/hibernate/search/test/util/logging/LoggerInfoStreamTest.java
@@ -8,9 +8,6 @@
import java.util.List;
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.spi.LoggingEvent;
import org.apache.lucene.analysis.standard.StandardAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.Field;
@@ -18,6 +15,7 @@
import org.apache.lucene.index.IndexWriter;
import org.apache.lucene.index.IndexWriterConfig;
import org.apache.lucene.store.RAMDirectory;
+import org.hibernate.search.test.util.impl.log4j.Log4j2ConfigurationAccessor;
import org.hibernate.search.util.logging.impl.LoggerInfoStream;
import org.hibernate.search.util.logging.impl.LuceneLogCategories;
import org.junit.After;
@@ -28,23 +26,24 @@
public class LoggerInfoStreamTest {
- private Level hsearchLevel;
- private final Logger hsearchLogger = Logger.getLogger( "org.hibernate.search" );
- private final Logger rootLogger = Logger.getRootLogger();
+ private static final String LOGGER_NAME = LuceneLogCategories.INFOSTREAM_LOGGER_CATEGORY.getName();
+
+ private final Log4j2ConfigurationAccessor programmaticConfig;
private TestAppender testAppender;
+ public LoggerInfoStreamTest() {
+ programmaticConfig = new Log4j2ConfigurationAccessor( LOGGER_NAME );
+ }
+
@Before
public void setUp() throws Exception {
- testAppender = new TestAppender();
- rootLogger.addAppender( testAppender );
- hsearchLevel = hsearchLogger.getLevel();
- hsearchLogger.setLevel( Level.TRACE );
+ testAppender = new TestAppender( "LuceneTestAppender" );
+ programmaticConfig.addAppender( testAppender );
}
@After
public void tearDown() throws Exception {
- rootLogger.removeAppender( testAppender );
- hsearchLogger.setLevel( hsearchLevel );
+ programmaticConfig.removeAppender();
}
@Test
@@ -63,8 +62,8 @@ public void testEnableInfoStream() throws Exception {
indexWriter.commit();
indexWriter.close();
- List loggingEvents = testAppender.searchByLoggerAndMessage( LuceneLogCategories.INFOSTREAM_LOGGER_CATEGORY.getName(), "IW:" );
+ List logEvents = testAppender.searchByLoggerAndMessage( LOGGER_NAME, "IW:" );
- assertFalse( loggingEvents.isEmpty() );
+ assertFalse( logEvents.isEmpty() );
}
}
diff --git a/engine/src/test/java/org/hibernate/search/test/util/logging/TestAppender.java b/engine/src/test/java/org/hibernate/search/test/util/logging/TestAppender.java
index d6cfd41ea43..a99e96efc86 100644
--- a/engine/src/test/java/org/hibernate/search/test/util/logging/TestAppender.java
+++ b/engine/src/test/java/org/hibernate/search/test/util/logging/TestAppender.java
@@ -6,36 +6,43 @@
*/
package org.hibernate.search.test.util.logging;
-import org.apache.commons.collections.map.MultiValueMap;
-import org.apache.log4j.WriterAppender;
-import org.apache.log4j.spi.LoggingEvent;
-
import java.util.ArrayList;
import java.util.Collection;
+import java.util.LinkedHashMap;
import java.util.List;
+import java.util.Map;
+
+import org.apache.logging.log4j.core.LogEvent;
+import org.apache.logging.log4j.core.appender.AbstractAppender;
+import org.apache.logging.log4j.core.config.Property;
+
-public class TestAppender extends WriterAppender {
+public class TestAppender extends AbstractAppender {
- private final MultiValueMap eventsByLogger = new MultiValueMap();
+ private final Map> eventMessagesByLogger = new LinkedHashMap<>();
+
+ public TestAppender(String name) {
+ super( name, null, null, true, Property.EMPTY_ARRAY );
+ }
@Override
- public void append(LoggingEvent event) {
+ public void append(LogEvent event) {
synchronized (this) {
- eventsByLogger.put( event.getLoggerName(), event );
+ eventMessagesByLogger.computeIfAbsent( event.getLoggerName(), ignored -> new ArrayList<>() )
+ .add( event.getMessage().getFormattedMessage() );
}
}
- public List searchByLoggerAndMessage(String logger, String contents) {
- ArrayList results = new ArrayList<>();
+ public List searchByLoggerAndMessage(String logger, String contents) {
+ ArrayList results = new ArrayList<>();
synchronized (this) {
- Collection collection = eventsByLogger.getCollection( logger );
+ Collection collection = eventMessagesByLogger.get( logger );
if ( collection == null ) {
return results;
}
- for ( Object event : collection ) {
- LoggingEvent loggingEvent = (LoggingEvent) event;
- if ( loggingEvent.getRenderedMessage().contains( contents ) ) {
- results.add( loggingEvent );
+ for ( String eventMessage : collection ) {
+ if ( eventMessage.contains( contents ) ) {
+ results.add( eventMessage );
}
}
}
diff --git a/engine/src/test/resources/log4j.properties b/engine/src/test/resources/log4j.properties
deleted file mode 100644
index 95c9908c7a1..00000000000
--- a/engine/src/test/resources/log4j.properties
+++ /dev/null
@@ -1,55 +0,0 @@
-### direct log messages to stdout ###
-log4j.appender.stdout=org.apache.log4j.ConsoleAppender
-log4j.appender.stdout.Target=System.out
-log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
-log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} (%t) %5p %c{1}:%L - %m%n
-
-### direct messages to file hibernate.log ###
-log4j.appender.file=org.apache.log4j.FileAppender
-log4j.appender.file.File=hibernate.log
-log4j.appender.file.layout=org.apache.log4j.PatternLayout
-log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} (%t) %5p %c{1}:%L - %m%n
-
-### direct messages to socket - chainsaw ###
-log4j.appender.socket=org.apache.log4j.net.SocketAppender
-log4j.appender.socket.remoteHost=localhost
-log4j.appender.socket.port=4560
-log4j.appender.socket.locationInfo=true
-
-### set log levels - for more verbose logging change 'info' to 'debug' ###
-
-log4j.rootLogger=warn, stdout
-log4j.logger.org.jboss=info
-#log4j.logger.com.jboss=debug
-
-log4j.logger.org.hibernate=info
-log4j.logger.org.hibernate.search=info
-
-#log4j.logger.org.hibernate.search=info
-#log4j.logger.org.hibernate.search.backend=debug
-
-### log just the SQL
-#log4j.logger.org.hibernate.SQL=debug
-
-#log4j.logger.org.hibernate.engine.CascadingAction=debug
-
-### log JDBC bind parameters ###
-#log4j.logger.org.hibernate.type=debug
-
-### log schema export/update ###
-log4j.logger.org.hibernate.tool.hbm2ddl=warn
-
-### log cache activity ###
-#log4j.logger.org.hibernate.cache=debug
-
-### enable the following line if you want to track down connection ###
-### leakages when using DriverManagerConnectionProvider ###
-#log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider=trace
-
-### annotation logs
-#log4j.logger.org.hibernate.annotation=info
-#log4j.logger.org.hibernate.cfg=info
-#log4j.logger.org.hibernate.cfg.SettingsFactory=info
-#log4j.logger.org.hibernate.cfg.AnnotationBinder=info
-#log4j.logger.org.hibernate.cfg.AnnotationConfiguration=info
-#log4j.logger.org.hibernate.cfg.Ejb3Column=info
diff --git a/engine/src/test/resources/log4j2.properties b/engine/src/test/resources/log4j2.properties
new file mode 100644
index 00000000000..270d3ed7aba
--- /dev/null
+++ b/engine/src/test/resources/log4j2.properties
@@ -0,0 +1,29 @@
+### direct log messages to stdout ###
+appender.stdout.type=Console
+appender.stdout.name=STDOUT
+appender.stdout.layout.type=PatternLayout
+appender.stdout.layout.pattern=%d{ABSOLUTE} (%t) %5p %c{1}:%L - %m%n
+
+## Loggers
+rootLogger.level=info
+rootLogger.appenderRef.stdout.ref=STDOUT
+
+### JBoss logger
+logger.jboss.name=org.jboss
+logger.jboss.level=info
+
+### Hibernate logger
+logger.hibernate.name=org.hibernate
+logger.hibernate.level=info
+
+### Search logger
+logger.search.name=org.hibernate.search
+logger.search.level=info
+
+### Hbm2ddl logger
+logger.hbm2ddl.name=org.hibernate.tool.hbm2ddl
+logger.hbm2ddl.level=warn
+
+### Elasticsearch logger
+logger.elasticsearch.name=org.elasticsearch.client
+logger.elasticsearch.level=debug
diff --git a/integrationtest/elasticsearch/pom.xml b/integrationtest/elasticsearch/pom.xml
index 7f6c3bcb89f..a251da196ca 100755
--- a/integrationtest/elasticsearch/pom.xml
+++ b/integrationtest/elasticsearch/pom.xml
@@ -147,8 +147,8 @@
test