diff --git a/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/base/AsterixTestHelper.java b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/base/AsterixTestHelper.java
index adb0d7a..4953ac8 100644
--- a/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/base/AsterixTestHelper.java
+++ b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/base/AsterixTestHelper.java
@@ -27,8 +27,6 @@
 import java.util.ArrayList;
 
 import org.apache.commons.io.FileUtils;
-import org.junit.rules.TestWatcher;
-import org.junit.runner.Description;
 
 public class AsterixTestHelper {
 
@@ -100,36 +98,4 @@
         }
     }
 
-    public static class RetainLogsRule extends TestWatcher {
-        private final File baseDir;
-        private final File destDir;
-        private long startTime;
-
-        public RetainLogsRule(File baseDir, File destDir) {
-            this.baseDir = baseDir;
-            this.destDir = destDir;
-        }
-
-        public RetainLogsRule(String baseDir, String destDir) {
-            this(new File(baseDir), new File(destDir));
-        }
-
-        @Override
-        protected void starting(Description description) {
-            startTime = System.currentTimeMillis();
-        }
-
-        @Override
-        protected void failed(Throwable e, Description description) {
-            File reportDir = new File(destDir, description.getTestClass().getName() + "." + description.getMethodName());
-            reportDir.mkdirs();
-            try {
-                AsterixTestHelper.deepSelectiveCopy(baseDir, reportDir,
-                        pathname -> pathname.getName().endsWith("log") &&
-                                pathname.lastModified() > startTime);
-            } catch (Exception e1) {
-                e1.printStackTrace();
-            }
-        }
-    }
 }
diff --git a/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/base/RetainLogsRule.java b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/base/RetainLogsRule.java
new file mode 100644
index 0000000..39bd5e7
--- /dev/null
+++ b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/base/RetainLogsRule.java
@@ -0,0 +1,57 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.test.base;
+
+import java.io.File;
+
+import org.junit.rules.TestWatcher;
+import org.junit.runner.Description;
+
+public class RetainLogsRule extends TestWatcher {
+    private final File baseDir;
+    private final File destDir;
+    private long startTime;
+
+    public RetainLogsRule(File baseDir, File destDir) {
+        this.baseDir = baseDir;
+        this.destDir = destDir;
+    }
+
+    public RetainLogsRule(String baseDir, String destDir) {
+        this(new File(baseDir), new File(destDir));
+    }
+
+    @Override
+    protected void starting(Description description) {
+        startTime = System.currentTimeMillis();
+    }
+
+    @Override
+    protected void failed(Throwable e, Description description) {
+        File reportDir = new File(destDir, description.getTestClass().getName() + "." + description.getMethodName());
+        reportDir.mkdirs();
+        try {
+            AsterixTestHelper.deepSelectiveCopy(baseDir, reportDir,
+                    pathname -> pathname.getName().endsWith("log") &&
+                            pathname.lastModified() > startTime);
+        } catch (Exception e1) {
+            e1.printStackTrace();
+        }
+    }
+}
diff --git a/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/base/TestMethodTracer.java b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/base/TestMethodTracer.java
new file mode 100644
index 0000000..692805f
--- /dev/null
+++ b/asterixdb/asterix-common/src/test/java/org/apache/asterix/test/base/TestMethodTracer.java
@@ -0,0 +1,62 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.test.base;
+
+import java.io.PrintStream;
+
+import org.junit.rules.TestWatcher;
+import org.junit.runner.Description;
+
+/*
+ * Traces method entry/exit to System.out (or supplied PrintStream).  To use, add the following to your test class:
+ *
+ *   @Rule
+ *   public TestRule watcher = new TestMethodTracer();
+ *
+ *   @Rule
+ *   public TestRule watcher = new TestMethodTracer(System.err);
+ */
+
+public class TestMethodTracer extends TestWatcher {
+
+    private final PrintStream out;
+
+    public TestMethodTracer(PrintStream out) {
+        this.out = out;
+    }
+
+    public TestMethodTracer() {
+        this(System.out);
+    }
+
+    @Override
+    protected void starting(Description description) {
+        out.println("## " + description.getMethodName() + " START");
+    }
+
+    @Override
+    protected void failed(Throwable e, Description description) {
+        out.println("## " + description.getMethodName() + " FAILED (" + e.getClass().getName() + ")");
+    }
+
+    @Override
+    protected void succeeded(Description description) {
+        out.println("## " + description.getMethodName() + " SUCCEEDED");
+    }
+}
diff --git a/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/test/AbstractExecutionIT.java b/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/test/AbstractExecutionIT.java
index 676137c..d9c902e 100644
--- a/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/test/AbstractExecutionIT.java
+++ b/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/test/AbstractExecutionIT.java
@@ -24,7 +24,7 @@
 import org.apache.asterix.external.util.ExternalDataConstants;
 import org.apache.asterix.external.util.IdentitiyResolverFactory;
 import org.apache.asterix.test.aql.TestExecutor;
-import org.apache.asterix.test.base.AsterixTestHelper;
+import org.apache.asterix.test.base.RetainLogsRule;
 import org.apache.asterix.test.runtime.HDFSCluster;
 import org.apache.asterix.testframework.context.TestCaseContext;
 import org.apache.asterix.testframework.context.TestFileContext;
@@ -65,7 +65,7 @@
             new File(StringUtils.join(new String[] { "target", "failsafe-reports" }, File.separator)).getAbsolutePath();
 
     @Rule
-    public TestRule retainLogs = new AsterixTestHelper.RetainLogsRule(
+    public TestRule retainLogs = new RetainLogsRule(
             AsterixInstallerIntegrationUtil.getManagixHome(), reportPath);
 
     @BeforeClass
diff --git a/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/test/AsterixExternalLibraryIT.java b/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/test/AsterixExternalLibraryIT.java
index 57aaeee..ae98d19 100644
--- a/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/test/AsterixExternalLibraryIT.java
+++ b/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/test/AsterixExternalLibraryIT.java
@@ -24,7 +24,7 @@
 
 import org.apache.asterix.event.model.AsterixInstance.State;
 import org.apache.asterix.test.aql.TestExecutor;
-import org.apache.asterix.test.base.AsterixTestHelper;
+import org.apache.asterix.test.base.RetainLogsRule;
 import org.apache.asterix.testframework.context.TestCaseContext;
 import org.apache.commons.lang3.StringUtils;
 import org.junit.AfterClass;
@@ -49,7 +49,7 @@
     private final TestExecutor testExecutor = new TestExecutor();
 
     @Rule
-    public TestRule retainLogs = new AsterixTestHelper.RetainLogsRule(
+    public TestRule retainLogs = new RetainLogsRule(
             AsterixInstallerIntegrationUtil.getManagixHome(), reportPath);
 
     @BeforeClass
diff --git a/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/transaction/DmlRecoveryIT.java b/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/transaction/DmlRecoveryIT.java
index 68c009a..b55510a 100644
--- a/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/transaction/DmlRecoveryIT.java
+++ b/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/transaction/DmlRecoveryIT.java
@@ -26,7 +26,7 @@
 import java.util.logging.Logger;
 
 import org.apache.asterix.test.aql.TestExecutor;
-import org.apache.asterix.test.base.AsterixTestHelper;
+import org.apache.asterix.test.base.RetainLogsRule;
 import org.apache.asterix.testframework.context.TestCaseContext;
 import org.apache.commons.io.FileUtils;
 import org.junit.AfterClass;
@@ -60,7 +60,7 @@
     private final TestExecutor testExecutor = new TestExecutor();
 
     @Rule
-    public TestRule retainLogs = new AsterixTestHelper.RetainLogsRule(managixHomePath, reportPath);
+    public TestRule retainLogs = new RetainLogsRule(managixHomePath, reportPath);
 
     @BeforeClass
     public static void setUp() throws Exception {
diff --git a/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/transaction/RecoveryIT.java b/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/transaction/RecoveryIT.java
index 9795702..98c0853 100644
--- a/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/transaction/RecoveryIT.java
+++ b/asterixdb/asterix-installer/src/test/java/org/apache/asterix/installer/transaction/RecoveryIT.java
@@ -26,7 +26,7 @@
 import java.util.logging.Logger;
 
 import org.apache.asterix.test.aql.TestExecutor;
-import org.apache.asterix.test.base.AsterixTestHelper;
+import org.apache.asterix.test.base.RetainLogsRule;
 import org.apache.asterix.test.runtime.HDFSCluster;
 import org.apache.asterix.testframework.context.TestCaseContext;
 import org.apache.commons.io.FileUtils;
@@ -58,7 +58,7 @@
     private final TestExecutor testExecutor = new TestExecutor();
 
     @Rule
-    public TestRule retainLogs = new AsterixTestHelper.RetainLogsRule(managixHomePath, reportPath);
+    public TestRule retainLogs = new RetainLogsRule(managixHomePath, reportPath);
 
     @BeforeClass
     public static void setUp() throws Exception {
diff --git a/asterixdb/asterix-server/src/test/java/org/apache/asterix/server/test/SampleLocalClusterIT.java b/asterixdb/asterix-server/src/test/java/org/apache/asterix/server/test/SampleLocalClusterIT.java
index e98262a..a49086b 100644
--- a/asterixdb/asterix-server/src/test/java/org/apache/asterix/server/test/SampleLocalClusterIT.java
+++ b/asterixdb/asterix-server/src/test/java/org/apache/asterix/server/test/SampleLocalClusterIT.java
@@ -18,16 +18,18 @@
  */
 package org.apache.asterix.server.test;
 
+import static org.apache.asterix.test.common.TestHelper.joinPath;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringWriter;
 import java.net.URL;
 import java.util.Collections;
-import java.util.logging.Logger;
 
 import org.apache.asterix.common.utils.ServletUtil.Servlets;
 import org.apache.asterix.test.aql.TestExecutor;
+import org.apache.asterix.test.base.TestMethodTracer;
 import org.apache.asterix.test.common.TestHelper;
 import org.apache.asterix.testframework.context.TestCaseContext.OutputFormat;
 import org.apache.commons.io.FileUtils;
@@ -35,11 +37,11 @@
 import org.junit.Assert;
 import org.junit.BeforeClass;
 import org.junit.FixMethodOrder;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.TestRule;
 import org.junit.runners.MethodSorters;
 
-import static org.apache.asterix.test.common.TestHelper.joinPath;
-
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 public class SampleLocalClusterIT {
 
@@ -54,7 +56,8 @@
 
     private static final String LOCAL_SAMPLES_DIR = joinPath(OUTPUT_DIR, "samples", "local");
 
-    private static final Logger LOGGER = Logger.getLogger(SampleLocalClusterIT.class.getName());
+    @Rule
+    public TestRule watcher = new TestMethodTracer();
 
     @BeforeClass
     public static void setUp() throws Exception {
