This is an automated email from the ASF dual-hosted git repository.

rec pushed a commit to branch 
bugfix/UIMA-6389-Logger_common_impl-swallows-exception
in repository https://gitbox.apache.org/repos/asf/uima-uimaj.git

commit e1c2c03e4be4ef271b07e5460a12532bd8736026
Author: Richard Eckart de Castilho <r...@apache.org>
AuthorDate: Mon Oct 18 16:18:48 2021 +0200

    [UIMA-6389] Logger_common_impl swallows exception
    
    - Extract Log4J2 log capturing code into a convenient auto-closable class
    - Add test at the level of the Slf4JLogger_impl to test that messages are 
logged properly (currently fails)
---
 .../apache/uima/util/impl/Slf4jLogger_impl.java    | 328 ++++++-----
 .../uima/util/impl/JSR47Logger_implTest.java       | 434 +++++++--------
 .../uima/util/impl/Log4jLogger_implTest.java       | 610 ++++++++++-----------
 3 files changed, 671 insertions(+), 701 deletions(-)

diff --git 
a/uimaj-core/src/main/java/org/apache/uima/util/impl/Slf4jLogger_impl.java 
b/uimaj-core/src/main/java/org/apache/uima/util/impl/Slf4jLogger_impl.java
index 75a2aaa..9349d1d 100644
--- a/uimaj-core/src/main/java/org/apache/uima/util/impl/Slf4jLogger_impl.java
+++ b/uimaj-core/src/main/java/org/apache/uima/util/impl/Slf4jLogger_impl.java
@@ -30,29 +30,28 @@ import org.slf4j.spi.LocationAwareLogger;
 /**
  * UIMA Logging interface implementation for SLF4j
  * 
- * This design gets a logger in static initialization, 
- * in order to see what the back end is.  If it is JUL or Log4j,
- * it sets flags so that subsequent calls to getInstance gets those 
- * UIMA logger impls, not this one, 
- * in order to slightly reduce indirection at run time.
+ * This design gets a logger in static initialization, in order to see what 
the back end is. If it
+ * is JUL or Log4j, it sets flags so that subsequent calls to getInstance gets 
those UIMA logger
+ * impls, not this one, in order to slightly reduce indirection at run time.
  * 
  */
 public class Slf4jLogger_impl extends Logger_common_impl {
-  
+
   public static final String DEFAULT_JUL = 
"uima.use_jul_as_default_uima_logger";
   public static final boolean IS_DEFAULT_JUL = 
Misc.getNoValueSystemProperty(DEFAULT_JUL);
-  
+
   static final boolean isJul;
   static final boolean isLog4j;
-  
+
   static {
     Class<?> staticLoggerBinderClass = null;
     try {
       staticLoggerBinderClass = 
Class.forName("org.slf4j.impl.StaticLoggerBinder");
     } catch (Exception e) {
-      // empty on purpose, if class not present, no back end logger, and 
staticLoggerBinderClass is left as null
+      // empty on purpose, if class not present, no back end logger, and 
staticLoggerBinderClass is
+      // left as null
     }
-    
+
     if (null == staticLoggerBinderClass) {
       if (IS_DEFAULT_JUL) {
         isJul = true;
@@ -65,33 +64,33 @@ public class Slf4jLogger_impl extends Logger_common_impl {
       // have some backend binding
       boolean tb;
       org.slf4j.Logger tempLogger = 
org.slf4j.LoggerFactory.getLogger("org.apache.uima");
-      try {  // for jdk14 impl
+      try { // for jdk14 impl
         Class<?> clazz = Class.forName("org.slf4j.impl.JDK14LoggerAdapter");
         tb = clazz != null && clazz.isAssignableFrom(tempLogger.getClass());
       } catch (ClassNotFoundException e1) {
         tb = false;
       }
       isJul = tb;
-      
+
       tb = false;
       if (!isJul) {
-        try {  // for log4j 2 impl
+        try { // for log4j 2 impl
           Class<?> clazz = 
Class.forName("org.apache.logging.slf4j.Log4jLogger");
           tb = null != clazz && clazz.isAssignableFrom(tempLogger.getClass());
         } catch (ClassNotFoundException e1) {
           tb = false;
         }
       }
-      isLog4j = tb;      
+      isLog4j = tb;
     }
   }
-  
+
   /**
    * logger object from the underlying Slf4j logging framework
    */
   final private org.slf4j.Logger logger;
-  final private boolean isLocationCapable;  // the slf4j simple logger is not 
-  
+  final private boolean isLocationCapable; // the slf4j simple logger is not
+
   /**
    * create a new LogWrapper class for the specified source class
    * 
@@ -100,20 +99,18 @@ public class Slf4jLogger_impl extends Logger_common_impl {
    */
   private Slf4jLogger_impl(Class<?> component) {
     super(component);
-    final String loggerName = (component != null) 
-                                 ? component.getName()
-                                 : "org.apache.uima";
- 
+    final String loggerName = (component != null) ? component.getName() : 
"org.apache.uima";
+
     logger = org.slf4j.LoggerFactory.getLogger(loggerName);
     isLocationCapable = logger instanceof org.slf4j.spi.LocationAwareLogger;
   }
-  
+
   private Slf4jLogger_impl(Slf4jLogger_impl l, int limit) {
     super(l, limit);
     this.logger = l.logger;
     isLocationCapable = logger instanceof org.slf4j.spi.LocationAwareLogger;
   }
-    
+
   /**
    * creates a new Logger instance for the specified source class
    * 
@@ -127,7 +124,7 @@ public class Slf4jLogger_impl extends Logger_common_impl {
       return JSR47Logger_impl.getInstance(component);
     }
     if (isLog4j) {
-      return Log4jLogger_impl.getInstance(component); 
+      return Log4jLogger_impl.getInstance(component);
     }
     return new Slf4jLogger_impl(component);
   }
@@ -140,76 +137,86 @@ public class Slf4jLogger_impl extends Logger_common_impl {
   public static synchronized Logger getInstance() {
     return getInstance(null);
   }
-  
+
+  @Override
   public Slf4jLogger_impl getLimitedLogger(int aLimit) {
     if (aLimit == Integer.MAX_VALUE || aLimit == this.limit_common) {
       return this;
     }
     return new Slf4jLogger_impl(this, aLimit);
   }
-  
+
   public static int getSlf4jLevel(Level level) {
-    switch(level.toInteger()) {
-    case Level.SEVERE_INT: return LocationAwareLogger.ERROR_INT;
-    case Level.WARNING_INT: return LocationAwareLogger.WARN_INT;
-    case Level.INFO_INT: return LocationAwareLogger.INFO_INT;
-    case Level.CONFIG_INT: return LocationAwareLogger.INFO_INT;
-    case Level.FINE_INT: return LocationAwareLogger.DEBUG_INT;
-    case Level.FINER_INT: return LocationAwareLogger.TRACE_INT;
-    case Level.FINEST_INT: return LocationAwareLogger.TRACE_INT;
+    switch (level.toInteger()) {
+      case Level.SEVERE_INT:
+        return LocationAwareLogger.ERROR_INT;
+      case Level.WARNING_INT:
+        return LocationAwareLogger.WARN_INT;
+      case Level.INFO_INT:
+        return LocationAwareLogger.INFO_INT;
+      case Level.CONFIG_INT:
+        return LocationAwareLogger.INFO_INT;
+      case Level.FINE_INT:
+        return LocationAwareLogger.DEBUG_INT;
+      case Level.FINER_INT:
+        return LocationAwareLogger.TRACE_INT;
+      case Level.FINEST_INT:
+        return LocationAwareLogger.TRACE_INT;
     }
     Misc.internalError();
-    return LocationAwareLogger.ERROR_INT; //ignored, just here for compile 
error avoidance
-  }  
-  
+    return LocationAwareLogger.ERROR_INT; // ignored, just here for compile 
error avoidance
+  }
+
   /*
    * (non-Javadoc)
    * 
    * @see org.apache.uima.util.Logger#isLoggable(org.apache.uima.util.Level)
    */
+  @Override
   public boolean isLoggable(Level level) {
     switch (level.toInteger()) {
-    case org.apache.uima.util.Level.OFF_INT:
-      return false;
-    case org.apache.uima.util.Level.SEVERE_INT:
-      return logger.isErrorEnabled();
-    case org.apache.uima.util.Level.WARNING_INT:
-      return logger.isWarnEnabled();
-    case org.apache.uima.util.Level.INFO_INT:
-      return logger.isInfoEnabled();
-    case org.apache.uima.util.Level.CONFIG_INT:
-      return logger.isDebugEnabled(UIMA_MARKER_CONFIG);
-    case org.apache.uima.util.Level.FINE_INT:
-      return logger.isDebugEnabled();
-    case org.apache.uima.util.Level.FINER_INT:
-      return logger.isTraceEnabled();
-    case org.apache.uima.util.Level.FINEST_INT:
-      return logger.isTraceEnabled(UIMA_MARKER_FINEST);
-    default: // for Level.ALL return false, that's what jul logger does
-      return false;
+      case org.apache.uima.util.Level.OFF_INT:
+        return false;
+      case org.apache.uima.util.Level.SEVERE_INT:
+        return logger.isErrorEnabled();
+      case org.apache.uima.util.Level.WARNING_INT:
+        return logger.isWarnEnabled();
+      case org.apache.uima.util.Level.INFO_INT:
+        return logger.isInfoEnabled();
+      case org.apache.uima.util.Level.CONFIG_INT:
+        return logger.isDebugEnabled(UIMA_MARKER_CONFIG);
+      case org.apache.uima.util.Level.FINE_INT:
+        return logger.isDebugEnabled();
+      case org.apache.uima.util.Level.FINER_INT:
+        return logger.isTraceEnabled();
+      case org.apache.uima.util.Level.FINEST_INT:
+        return logger.isTraceEnabled(UIMA_MARKER_FINEST);
+      default: // for Level.ALL return false, that's what jul logger does
+        return false;
     }
   }
 
+  @Override
   public boolean isLoggable(Level level, Marker marker) {
     switch (level.toInteger()) {
-    case org.apache.uima.util.Level.OFF_INT:
-      return false;
-    case org.apache.uima.util.Level.SEVERE_INT:
-      return logger.isErrorEnabled(marker);
-    case org.apache.uima.util.Level.WARNING_INT:
-      return logger.isWarnEnabled(marker);
-    case org.apache.uima.util.Level.INFO_INT:
-      return logger.isInfoEnabled(marker);
-    case org.apache.uima.util.Level.CONFIG_INT:
-      return logger.isInfoEnabled(marker);
-    case org.apache.uima.util.Level.FINE_INT:
-      return logger.isDebugEnabled(marker);
-    case org.apache.uima.util.Level.FINER_INT:
-      return logger.isTraceEnabled(marker);
-    case org.apache.uima.util.Level.FINEST_INT:
-      return logger.isTraceEnabled(marker);
-    default: // for Level.ALL return false, that's what jul logger does
-      return false;
+      case org.apache.uima.util.Level.OFF_INT:
+        return false;
+      case org.apache.uima.util.Level.SEVERE_INT:
+        return logger.isErrorEnabled(marker);
+      case org.apache.uima.util.Level.WARNING_INT:
+        return logger.isWarnEnabled(marker);
+      case org.apache.uima.util.Level.INFO_INT:
+        return logger.isInfoEnabled(marker);
+      case org.apache.uima.util.Level.CONFIG_INT:
+        return logger.isInfoEnabled(marker);
+      case org.apache.uima.util.Level.FINE_INT:
+        return logger.isDebugEnabled(marker);
+      case org.apache.uima.util.Level.FINER_INT:
+        return logger.isTraceEnabled(marker);
+      case org.apache.uima.util.Level.FINEST_INT:
+        return logger.isTraceEnabled(marker);
+      default: // for Level.ALL return false, that's what jul logger does
+        return false;
     }
   }
 
@@ -218,62 +225,66 @@ public class Slf4jLogger_impl extends Logger_common_impl {
    * 
    * @see org.apache.uima.util.Logger#setLevel(org.apache.uima.util.Level)
    */
-  public void setLevel(Level level) {    
+  @Override
+  public void setLevel(Level level) {
     // allow nop operation
   }
-  
+
   // does the uima-logger style of message formatting
-  public void log(Marker m, String aFqcn, Level level, String message, 
Object[] args, Throwable thrown) {
+  @Override
+  public void log(Marker m, String aFqcn, Level level, String message, 
Object[] args,
+          Throwable thrown) {
     log(m, aFqcn, level, MessageFormat.format(message, args), thrown);
   }
-  
+
   @Override
   public void log(Marker m, String aFqcn, Level level, String msg_with_params, 
Throwable thrown) {
-    m = (m == null) 
-        ? getMarkerForLevel(level) 
-        : m;
-        
-  if (isLocationCapable) {  // slf4j simple logger is not
-    ((org.slf4j.spi.LocationAwareLogger)logger).log(m, aFqcn, 
getSlf4jLevel(level), msg_with_params, null, thrown);
-  } else {
-    switch(level.toInteger()) {
-    case Level.SEVERE_INT: 
-      // all of these calls to MessageFormat are to the java.text.MessageFormat
-      // to do {n} style format substitution
-      logger.error(m, msg_with_params, thrown); 
-      break;
-    case Level.WARNING_INT: 
-      logger.warn(m, msg_with_params, thrown); 
-      break;
-    case Level.INFO_INT: 
-      logger.info(m, msg_with_params, thrown); 
-      break;
-    case Level.CONFIG_INT: 
-      logger.info(m, msg_with_params, thrown); 
-      break;
-    case Level.FINE_INT: 
-      logger.debug(m, msg_with_params, thrown); 
-      break;
-    case Level.FINER_INT: 
-      logger.trace(m, msg_with_params, thrown); 
-      break;
-    case Level.FINEST_INT: 
-      logger.trace(m, msg_with_params, thrown); 
-      break;
-    default: Misc.internalError();
+    m = (m == null) ? getMarkerForLevel(level) : m;
+
+    if (isLocationCapable) { // slf4j simple logger is not
+      ((org.slf4j.spi.LocationAwareLogger) logger).log(m, aFqcn, 
getSlf4jLevel(level),
+              msg_with_params, null, thrown);
+    } else {
+      switch (level.toInteger()) {
+        case Level.SEVERE_INT:
+          // all of these calls to MessageFormat are to the 
java.text.MessageFormat
+          // to do {n} style format substitution
+          logger.error(m, msg_with_params, thrown);
+          break;
+        case Level.WARNING_INT:
+          logger.warn(m, msg_with_params, thrown);
+          break;
+        case Level.INFO_INT:
+          logger.info(m, msg_with_params, thrown);
+          break;
+        case Level.CONFIG_INT:
+          logger.info(m, msg_with_params, thrown);
+          break;
+        case Level.FINE_INT:
+          logger.debug(m, msg_with_params, thrown);
+          break;
+        case Level.FINER_INT:
+          logger.trace(m, msg_with_params, thrown);
+          break;
+        case Level.FINEST_INT:
+          logger.trace(m, msg_with_params, thrown);
+          break;
+        default:
+          Misc.internalError();
+      }
     }
-  }
-    
+
   }
 
   // does the slf4j style of message formatting
-  public void log2(Marker m, String aFqcn, Level level, String message, 
Object[] args, Throwable thrown) {
-    m = (m == null) 
-        ? getMarkerForLevel(level) 
-        : m;
-        
-    if (isLocationCapable) {  // slf4j simple logger is not
-      ((org.slf4j.spi.LocationAwareLogger)logger).log(m, aFqcn, 
getSlf4jLevel(level), message, args, thrown);
+  @Override
+  public void log2(Marker m, String aFqcn, Level level, String message, 
Object[] args,
+          Throwable thrown) {
+    m = (m == null) ? getMarkerForLevel(level) : m;
+
+    if (isLocationCapable) { // slf4j simple logger is not
+      ((org.slf4j.spi.LocationAwareLogger) logger).log(m, aFqcn, 
getSlf4jLevel(level), message,
+              args, thrown);
     } else {
       if (thrown != null) {
         Object[] args1 = (args == null) ? new Object[1] : new 
Object[args.length + 1];
@@ -282,38 +293,40 @@ public class Slf4jLogger_impl extends Logger_common_impl {
         }
         args1[args1.length - 1] = thrown;
         args = args1;
-      }  
-      switch(level.toInteger()) {
-      case Level.SEVERE_INT: 
-        logger.error(m, message, args); 
-        break;
-      case Level.WARNING_INT: 
-        logger.warn(m, message, args); 
-        break;
-      case Level.INFO_INT: 
-        logger.info(m, message, args); 
-        break;
-      case Level.CONFIG_INT: 
-        logger.info(m, message, args); 
-        break;
-      case Level.FINE_INT: 
-        logger.debug(m, message, args); 
-        break;
-      case Level.FINER_INT: 
-        logger.trace(m, message, args); 
-        break;
-      case Level.FINEST_INT: 
-        logger.trace(m, message, args); 
-        break;
-      default: Misc.internalError();
+      }
+      switch (level.toInteger()) {
+        case Level.SEVERE_INT:
+          logger.error(m, message, args);
+          break;
+        case Level.WARNING_INT:
+          logger.warn(m, message, args);
+          break;
+        case Level.INFO_INT:
+          logger.info(m, message, args);
+          break;
+        case Level.CONFIG_INT:
+          logger.info(m, message, args);
+          break;
+        case Level.FINE_INT:
+          logger.debug(m, message, args);
+          break;
+        case Level.FINER_INT:
+          logger.trace(m, message, args);
+          break;
+        case Level.FINEST_INT:
+          logger.trace(m, message, args);
+          break;
+        default:
+          Misc.internalError();
       }
     }
   }
-  
+
   /**
    * @return the logger name
    * @see org.slf4j.Logger#getName()
    */
+  @Override
   public String getName() {
     return logger.getName();
   }
@@ -322,70 +335,78 @@ public class Slf4jLogger_impl extends Logger_common_impl {
    * @return -
    * @see org.slf4j.Logger#isTraceEnabled()
    */
+  @Override
   public boolean isTraceEnabled() {
     return logger.isTraceEnabled();
   }
 
   /**
-   * @param marker -
+   * @param marker
+   *          -
    * @return true if trace is enabled for this marker
    * @see org.slf4j.Logger#isTraceEnabled(org.slf4j.Marker)
    */
+  @Override
   public boolean isTraceEnabled(Marker marker) {
     return logger.isTraceEnabled(marker);
   }
 
-
   /**
    * @return -
    * @see org.slf4j.Logger#isDebugEnabled()
    */
+  @Override
   public boolean isDebugEnabled() {
     return logger.isDebugEnabled();
   }
 
   /**
-   * @param marker -
+   * @param marker
+   *          -
    * @return true if is enabled for this marker
    * @see org.slf4j.Logger#isDebugEnabled(org.slf4j.Marker)
    */
+  @Override
   public boolean isDebugEnabled(Marker marker) {
     return logger.isDebugEnabled(marker);
   }
 
-
   /**
    * @return -
    * @see org.slf4j.Logger#isInfoEnabled()
    */
+  @Override
   public boolean isInfoEnabled() {
     return logger.isInfoEnabled();
   }
 
-
   /**
-   * @param marker -
+   * @param marker
+   *          -
    * @return true if is enabled for this marker
    * @see org.slf4j.Logger#isInfoEnabled(org.slf4j.Marker)
    */
+  @Override
   public boolean isInfoEnabled(Marker marker) {
     return logger.isInfoEnabled(marker);
   }
 
-
   /**
    * @return -
    * @see org.slf4j.Logger#isWarnEnabled()
    */
+  @Override
   public boolean isWarnEnabled() {
     return logger.isWarnEnabled();
   }
 
   /**
-   * @param marker -
+   * @param marker
+   *          -
    * @return true if is enabled for this marker
    * @see org.slf4j.Logger#isWarnEnabled(org.slf4j.Marker)
    */
+  @Override
   public boolean isWarnEnabled(Marker marker) {
     return logger.isWarnEnabled(marker);
   }
@@ -394,15 +415,18 @@ public class Slf4jLogger_impl extends Logger_common_impl {
    * @return -
    * @see org.slf4j.Logger#isErrorEnabled()
    */
+  @Override
   public boolean isErrorEnabled() {
     return logger.isErrorEnabled();
   }
 
   /**
-   * @param marker -
+   * @param marker
+   *          -
    * @return true if is enabled for this marker
    * @see org.slf4j.Logger#isErrorEnabled(org.slf4j.Marker)
    */
+  @Override
   public boolean isErrorEnabled(Marker marker) {
     return logger.isErrorEnabled(marker);
   }
diff --git 
a/uimaj-core/src/test/java/org/apache/uima/util/impl/JSR47Logger_implTest.java 
b/uimaj-core/src/test/java/org/apache/uima/util/impl/JSR47Logger_implTest.java
index c0364f1..1221a40 100644
--- 
a/uimaj-core/src/test/java/org/apache/uima/util/impl/JSR47Logger_implTest.java
+++ 
b/uimaj-core/src/test/java/org/apache/uima/util/impl/JSR47Logger_implTest.java
@@ -16,15 +16,14 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-
 package org.apache.uima.util.impl;
 
 import java.util.HashMap;
 import java.util.logging.Logger;
 
 import org.apache.uima.util.Level;
-
 import org.junit.Assert;
+
 import junit.framework.TestCase;
 
 /**
@@ -51,21 +50,21 @@ public class JSR47Logger_implTest extends TestCase {
   }
 
   public void testLogWrapperCreation() throws Exception {
-    
+
     // Set the root logger's level to INFO ... may not be the default
     
java.util.logging.Logger.getLogger("").setLevel(java.util.logging.Level.INFO);
 
     try {
-    org.apache.uima.util.Logger uimaLogger = JSR47Logger_impl.getInstance();
-    org.apache.uima.util.Logger classLogger = 
JSR47Logger_impl.getInstance(this.getClass());
-    uimaLogger.setLevel(null);  // causes it to inherit from above
-    classLogger.setLevel(null);  // causes it to inherit from above
-
-    // check base configuration
-    Assert.assertNotNull(uimaLogger);
-    Assert.assertNotNull(classLogger);
-    Assert.assertTrue(uimaLogger.isLoggable(Level.INFO));
-    Assert.assertTrue(classLogger.isLoggable(Level.INFO));
+      org.apache.uima.util.Logger uimaLogger = JSR47Logger_impl.getInstance();
+      org.apache.uima.util.Logger classLogger = 
JSR47Logger_impl.getInstance(this.getClass());
+      uimaLogger.setLevel(null); // causes it to inherit from above
+      classLogger.setLevel(null); // causes it to inherit from above
+
+      // check base configuration
+      Assert.assertNotNull(uimaLogger);
+      Assert.assertNotNull(classLogger);
+      Assert.assertTrue(uimaLogger.isLoggable(Level.INFO));
+      Assert.assertTrue(classLogger.isLoggable(Level.INFO));
     } finally {
       
java.util.logging.Logger.getLogger("").setLevel(java.util.logging.Level.INFO);
 
@@ -76,102 +75,101 @@ public class JSR47Logger_implTest extends TestCase {
     // create logger
     org.apache.uima.util.Logger uimaLogger = JSR47Logger_impl.getInstance();
     org.apache.uima.util.Logger classLogger = 
JSR47Logger_impl.getInstance(this.getClass());
-    //get uimaLogger log level, get parent logger of "org.apache.uima" until 
we have the
-    //JSR47 root logger that defines the default log level
+    // get uimaLogger log level, get parent logger of "org.apache.uima" until 
we have the
+    // JSR47 root logger that defines the default log level
     Logger jsrLogger = java.util.logging.Logger.getLogger("org.apache.uima");
-    while(jsrLogger.getLevel() == null) {
-      jsrLogger = jsrLogger.getParent(); 
+    while (jsrLogger.getLevel() == null) {
+      jsrLogger = jsrLogger.getParent();
     }
     Level defaultLogLevel = logLevels.get(jsrLogger.getLevel().toString());
 
     try {
-    uimaLogger.setLevel(null);  // causes it to inherit from above
-    classLogger.setLevel(null);  // causes it to inherit from above
-
-       
-    // check message logging for root logger based on default log level
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.ALL), uimaLogger
-            .isLoggable(Level.ALL));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINEST), 
uimaLogger
-            .isLoggable(Level.FINEST));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINER), 
uimaLogger
-            .isLoggable(Level.FINER));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINE), 
uimaLogger
-            .isLoggable(Level.FINE));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.CONFIG), 
uimaLogger
-            .isLoggable(Level.CONFIG));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.INFO), 
uimaLogger
-            .isLoggable(Level.INFO));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.WARNING), 
uimaLogger
-            .isLoggable(Level.WARNING));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.SEVERE), 
uimaLogger
-            .isLoggable(Level.SEVERE));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.OFF), uimaLogger
-            .isLoggable(Level.OFF));
-
-    // check message logging for class logger based on default log level
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.ALL), 
classLogger
-            .isLoggable(Level.ALL));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINEST), 
classLogger
-            .isLoggable(Level.FINEST));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINER), 
classLogger
-            .isLoggable(Level.FINER));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINE), 
classLogger
-            .isLoggable(Level.FINE));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.CONFIG), 
classLogger
-            .isLoggable(Level.CONFIG));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.INFO), 
classLogger
-            .isLoggable(Level.INFO));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.WARNING), 
classLogger
-            .isLoggable(Level.WARNING));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.SEVERE), 
classLogger
-            .isLoggable(Level.SEVERE));
-    Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.OFF), 
classLogger
-            .isLoggable(Level.OFF));
-
-    // reset class logger level to OFF
-    // 
Logger.getLogger(this.getClass().getName()).setLevel(java.util.logging.Level.OFF);
-    classLogger.setLevel(Level.OFF);
-    Assert.assertFalse(classLogger.isLoggable(Level.ALL));
-    Assert.assertFalse(classLogger.isLoggable(Level.FINEST));
-    Assert.assertFalse(classLogger.isLoggable(Level.FINER));
-    Assert.assertFalse(classLogger.isLoggable(Level.FINE));
-    Assert.assertFalse(classLogger.isLoggable(Level.CONFIG));
-    Assert.assertFalse(classLogger.isLoggable(Level.INFO));
-    Assert.assertFalse(classLogger.isLoggable(Level.WARNING));
-    Assert.assertFalse(classLogger.isLoggable(Level.SEVERE));
-    Assert.assertFalse(classLogger.isLoggable(Level.OFF));
-
-    // reset class logger level to ALL
-    // 
Logger.getLogger(this.getClass().getName()).setLevel(java.util.logging.Level.ALL);
-    classLogger.setLevel(Level.ALL);
-    Assert.assertTrue(classLogger.isLoggable(Level.ALL));
-    Assert.assertTrue(classLogger.isLoggable(Level.FINEST));
-    Assert.assertTrue(classLogger.isLoggable(Level.FINER));
-    Assert.assertTrue(classLogger.isLoggable(Level.FINE));
-    Assert.assertTrue(classLogger.isLoggable(Level.CONFIG));
-    Assert.assertTrue(classLogger.isLoggable(Level.INFO));
-    Assert.assertTrue(classLogger.isLoggable(Level.WARNING));
-    Assert.assertTrue(classLogger.isLoggable(Level.SEVERE));
-    Assert.assertTrue(classLogger.isLoggable(Level.OFF));
-
-    // reset class logger level to WARNING
-    // 
Logger.getLogger(this.getClass().getName()).setLevel(java.util.logging.Level.WARNING);
-    classLogger.setLevel(Level.WARNING);
-    Assert.assertFalse(classLogger.isLoggable(Level.ALL));
-    Assert.assertFalse(classLogger.isLoggable(Level.FINEST));
-    Assert.assertFalse(classLogger.isLoggable(Level.FINER));
-    Assert.assertFalse(classLogger.isLoggable(Level.FINE));
-    Assert.assertFalse(classLogger.isLoggable(Level.CONFIG));
-    Assert.assertFalse(classLogger.isLoggable(Level.INFO));
-    Assert.assertTrue(classLogger.isLoggable(Level.WARNING));
-    Assert.assertTrue(classLogger.isLoggable(Level.SEVERE));
-    Assert.assertTrue(classLogger.isLoggable(Level.OFF));
+      uimaLogger.setLevel(null); // causes it to inherit from above
+      classLogger.setLevel(null); // causes it to inherit from above
+
+      // check message logging for root logger based on default log level
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.ALL),
+              uimaLogger.isLoggable(Level.ALL));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINEST),
+              uimaLogger.isLoggable(Level.FINEST));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINER),
+              uimaLogger.isLoggable(Level.FINER));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINE),
+              uimaLogger.isLoggable(Level.FINE));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.CONFIG),
+              uimaLogger.isLoggable(Level.CONFIG));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.INFO),
+              uimaLogger.isLoggable(Level.INFO));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.WARNING),
+              uimaLogger.isLoggable(Level.WARNING));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.SEVERE),
+              uimaLogger.isLoggable(Level.SEVERE));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.OFF),
+              uimaLogger.isLoggable(Level.OFF));
+
+      // check message logging for class logger based on default log level
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.ALL),
+              classLogger.isLoggable(Level.ALL));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINEST),
+              classLogger.isLoggable(Level.FINEST));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINER),
+              classLogger.isLoggable(Level.FINER));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINE),
+              classLogger.isLoggable(Level.FINE));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.CONFIG),
+              classLogger.isLoggable(Level.CONFIG));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.INFO),
+              classLogger.isLoggable(Level.INFO));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.WARNING),
+              classLogger.isLoggable(Level.WARNING));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.SEVERE),
+              classLogger.isLoggable(Level.SEVERE));
+      Assert.assertEquals(defaultLogLevel.isGreaterOrEqual(Level.OFF),
+              classLogger.isLoggable(Level.OFF));
+
+      // reset class logger level to OFF
+      // 
Logger.getLogger(this.getClass().getName()).setLevel(java.util.logging.Level.OFF);
+      classLogger.setLevel(Level.OFF);
+      Assert.assertFalse(classLogger.isLoggable(Level.ALL));
+      Assert.assertFalse(classLogger.isLoggable(Level.FINEST));
+      Assert.assertFalse(classLogger.isLoggable(Level.FINER));
+      Assert.assertFalse(classLogger.isLoggable(Level.FINE));
+      Assert.assertFalse(classLogger.isLoggable(Level.CONFIG));
+      Assert.assertFalse(classLogger.isLoggable(Level.INFO));
+      Assert.assertFalse(classLogger.isLoggable(Level.WARNING));
+      Assert.assertFalse(classLogger.isLoggable(Level.SEVERE));
+      Assert.assertFalse(classLogger.isLoggable(Level.OFF));
+
+      // reset class logger level to ALL
+      // 
Logger.getLogger(this.getClass().getName()).setLevel(java.util.logging.Level.ALL);
+      classLogger.setLevel(Level.ALL);
+      Assert.assertTrue(classLogger.isLoggable(Level.ALL));
+      Assert.assertTrue(classLogger.isLoggable(Level.FINEST));
+      Assert.assertTrue(classLogger.isLoggable(Level.FINER));
+      Assert.assertTrue(classLogger.isLoggable(Level.FINE));
+      Assert.assertTrue(classLogger.isLoggable(Level.CONFIG));
+      Assert.assertTrue(classLogger.isLoggable(Level.INFO));
+      Assert.assertTrue(classLogger.isLoggable(Level.WARNING));
+      Assert.assertTrue(classLogger.isLoggable(Level.SEVERE));
+      Assert.assertTrue(classLogger.isLoggable(Level.OFF));
+
+      // reset class logger level to WARNING
+      // 
Logger.getLogger(this.getClass().getName()).setLevel(java.util.logging.Level.WARNING);
+      classLogger.setLevel(Level.WARNING);
+      Assert.assertFalse(classLogger.isLoggable(Level.ALL));
+      Assert.assertFalse(classLogger.isLoggable(Level.FINEST));
+      Assert.assertFalse(classLogger.isLoggable(Level.FINER));
+      Assert.assertFalse(classLogger.isLoggable(Level.FINE));
+      Assert.assertFalse(classLogger.isLoggable(Level.CONFIG));
+      Assert.assertFalse(classLogger.isLoggable(Level.INFO));
+      Assert.assertTrue(classLogger.isLoggable(Level.WARNING));
+      Assert.assertTrue(classLogger.isLoggable(Level.SEVERE));
+      Assert.assertTrue(classLogger.isLoggable(Level.OFF));
 
     } finally {
       // reset log level to default log level
       classLogger.setLevel(Level.INFO);
-      uimaLogger.setLevel(Level.INFO);      
+      uimaLogger.setLevel(Level.INFO);
     }
   }
 
@@ -180,61 +178,62 @@ public class JSR47Logger_implTest extends TestCase {
     final org.apache.uima.util.Logger logger = JSR47Logger_impl.getInstance();
     // reset log level to INFO
     try {
-    logger.setLevel(Level.INFO);
-
-    // File file = File.createTempFile("LoggingTest","log");
-    // file.deleteOnExit();
-
-    // change output temporary file
-    // logger.setOutputStream(new PrintStream(new FileOutputStream(file)));
-
-    // log test with method log(Level,String)
-    logger.log(Level.INFO, "My first test message");
-    logger.log(Level.INFO, "");
-    logger.log(Level.INFO, null);
-
-    // log test with method log(Level,String,Object)
-    Object obj = null;
-    logger.log(Level.INFO, "My {0} test message", "second");
-    logger.log(Level.INFO, "My {0} test message", new Object());
-    logger.log(Level.INFO, "My {0} test message", "");
-    logger.log(Level.INFO, "My {0} test message", obj);
-    logger.log(Level.INFO, "", "");
-    logger.log(Level.INFO, null, "");
-
-    // log test with method log(Level,String,Object[])
-    logger.log(Level.INFO, "My {0} test message", new Object[] { "third" });
-    logger.log(Level.INFO, "My {0} test message", new Object[] {});
-    logger.log(Level.INFO, "", new Object[] { "" });
-    logger.log(Level.INFO, "", new Object[] { null });
-    logger.log(Level.INFO, "My {0} test message", new Object[] { "" });
-    logger.log(Level.INFO, "My {0} test message", new Object[] { null });
-    logger.log(Level.INFO, null, "");
-
-    // log test with method log(Level,String,Throwable)
-    logger.setLevel(Level.WARNING); // Don't log the expected exceptions
-    Throwable thrown = new Throwable();
-    logger.log(Level.INFO, "My fourth test message", thrown);
-    logger.log(Level.INFO, "", thrown);
-    logger.log(Level.INFO, null, thrown);
-    thrown = null;
-    logger.log(Level.INFO, "My fourth test message", thrown);
-
-    new Runnable() {
-      public void run() {
-        logger.log(getClass().getName(), Level.INFO, "Message from wrapper", 
null);
-      }
-    }.run();
-    
-    // test deprecated log method
-    logger.log("My fifth test message");
-    logger.log("");
-    logger.log(null);
-
-    // test deprecated logException method
-    Exception ex = new Exception("My sixth test message");
-    logger.logException(ex);
-    logger.logException(null);
+      logger.setLevel(Level.INFO);
+
+      // File file = File.createTempFile("LoggingTest","log");
+      // file.deleteOnExit();
+
+      // change output temporary file
+      // logger.setOutputStream(new PrintStream(new FileOutputStream(file)));
+
+      // log test with method log(Level,String)
+      logger.log(Level.INFO, "My first test message");
+      logger.log(Level.INFO, "");
+      logger.log(Level.INFO, null);
+
+      // log test with method log(Level,String,Object)
+      Object obj = null;
+      logger.log(Level.INFO, "My {0} test message", "second");
+      logger.log(Level.INFO, "My {0} test message", new Object());
+      logger.log(Level.INFO, "My {0} test message", "");
+      logger.log(Level.INFO, "My {0} test message", obj);
+      logger.log(Level.INFO, "", "");
+      logger.log(Level.INFO, null, "");
+
+      // log test with method log(Level,String,Object[])
+      logger.log(Level.INFO, "My {0} test message", new Object[] { "third" });
+      logger.log(Level.INFO, "My {0} test message", new Object[] {});
+      logger.log(Level.INFO, "", new Object[] { "" });
+      logger.log(Level.INFO, "", new Object[] { null });
+      logger.log(Level.INFO, "My {0} test message", new Object[] { "" });
+      logger.log(Level.INFO, "My {0} test message", new Object[] { null });
+      logger.log(Level.INFO, null, "");
+
+      // log test with method log(Level,String,Throwable)
+      logger.setLevel(Level.WARNING); // Don't log the expected exceptions
+      Throwable thrown = new Throwable();
+      logger.log(Level.INFO, "My fourth test message", thrown);
+      logger.log(Level.INFO, "", thrown);
+      logger.log(Level.INFO, null, thrown);
+      thrown = null;
+      logger.log(Level.INFO, "My fourth test message", thrown);
+
+      new Runnable() {
+        @Override
+        public void run() {
+          logger.log(getClass().getName(), Level.INFO, "Message from wrapper", 
null);
+        }
+      }.run();
+
+      // test deprecated log method
+      logger.log("My fifth test message");
+      logger.log("");
+      logger.log(null);
+
+      // test deprecated logException method
+      Exception ex = new Exception("My sixth test message");
+      logger.logException(ex);
+      logger.logException(null);
     } finally {
       logger.setLevel(Level.INFO);
     }
@@ -243,68 +242,69 @@ public class JSR47Logger_implTest extends TestCase {
   public void testMessageKeyLogMethods() throws Exception {
     // create Logger
     org.apache.uima.util.Logger logger = JSR47Logger_impl.getInstance();
-    
+
     try {
-    // reset log level to INFO
-    logger.setLevel(Level.INFO);
-
-    // File file = File.createTempFile("LoggingTest","log");
-    // file.deleteOnExit();
-
-    // change output temporary file
-    // logger.setOutputStream(new PrintStream(new FileOutputStream(file)));
-
-    // test deprecated log(String, String, Object[])
-    String msgKey = "UIMA_logger_test";
-    String bundle = "org.apache.uima.util.impl.logger_test_messages";
-    logger.log(bundle, msgKey, new Object[] { "message key test" });
-    logger.log(bundle, null, new Object[] { "message key test" });
-    logger.log(bundle, msgKey, new Object[] { "" });
-    logger.log(bundle, msgKey, new Object[] { null });
-
-    // test method logrb(Level, String, String, String, String)
-    logger.logrb(Level.INFO, null, null, bundle, msgKey);
-    logger.logrb(Level.INFO, null, null, bundle, null);
-    logger.logrb(Level.INFO, null, null, null, msgKey);
-    logger.logrb(Level.INFO, null, null, null, null);
-    logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey);
-    logger.logrb(Level.INFO, "testClass", "testMethod", null, null);
-
-    // test method logrb(Level, String, String, String, String, Object)
-    Object obj = null;
-    logger.logrb(Level.INFO, null, null, bundle, msgKey, new Object());
-    logger.logrb(Level.INFO, null, null, bundle, msgKey, "message key test");
-    logger.logrb(Level.INFO, null, null, bundle, null, "message key test");
-    logger.logrb(Level.INFO, null, null, null, msgKey, "");
-    logger.logrb(Level.INFO, null, null, null, null, "");
-    logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey, obj);
-    logger.logrb(Level.INFO, "testClass", "testMethod", null, null, obj);
-
-    // test method logrb(Level, String, String, String, String, Object[])
-    Object[] objects = null;
-    logger.logrb(Level.INFO, null, null, bundle, msgKey, new Object[] {});
-    logger.logrb(Level.INFO, null, null, bundle, null, new Object[] { "message 
key test" });
-    logger.logrb(Level.INFO, null, null, null, msgKey, new Object[] { "" });
-    logger.logrb(Level.INFO, null, null, null, null, new Object[] { "" });
-    logger.logrb(Level.INFO, null, null, null, null, new Object[] { null });
-    logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey, 
objects);
-    logger.logrb(Level.INFO, "testClass", "testMethod", null, null, objects);
-
-    // test method logrb(Level, String, String, String, String, thrown)
-    Throwable thrown = new Throwable();
-    logger.setLevel(Level.WARNING); // Don't log the expected exceptions
-    logger.logrb(Level.INFO, null, null, bundle, msgKey, thrown);
-    logger.logrb(Level.INFO, null, null, bundle, null, thrown);
-    logger.logrb(Level.INFO, null, null, null, msgKey, thrown);
-    logger.logrb(Level.INFO, null, null, null, null, thrown);
-    thrown = null;
-    logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey, 
thrown);
-    logger.logrb(Level.INFO, "testClass", "testMethod", null, null, thrown);
-    
-    // https://issues.apache.org/jira/browse/UIMA-5719
-    logger.logrb(Level.WARNING, "testClass", "testMethod", 
"org.apache.uima.impl.log_messages", "UIMA_external_override_ignored__CONFIG", 
new Object[] { "n1", "${abc}" });
-  } finally {
-    logger.setLevel(Level.INFO);
-  }
+      // reset log level to INFO
+      logger.setLevel(Level.INFO);
+
+      // File file = File.createTempFile("LoggingTest","log");
+      // file.deleteOnExit();
+
+      // change output temporary file
+      // logger.setOutputStream(new PrintStream(new FileOutputStream(file)));
+
+      // test deprecated log(String, String, Object[])
+      String msgKey = "UIMA_logger_test";
+      String bundle = "org.apache.uima.util.impl.logger_test_messages";
+      logger.log(bundle, msgKey, new Object[] { "message key test" });
+      logger.log(bundle, null, new Object[] { "message key test" });
+      logger.log(bundle, msgKey, new Object[] { "" });
+      logger.log(bundle, msgKey, new Object[] { null });
+
+      // test method logrb(Level, String, String, String, String)
+      logger.logrb(Level.INFO, null, null, bundle, msgKey);
+      logger.logrb(Level.INFO, null, null, bundle, null);
+      logger.logrb(Level.INFO, null, null, null, msgKey);
+      logger.logrb(Level.INFO, null, null, null, null);
+      logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey);
+      logger.logrb(Level.INFO, "testClass", "testMethod", null, null);
+
+      // test method logrb(Level, String, String, String, String, Object)
+      Object obj = null;
+      logger.logrb(Level.INFO, null, null, bundle, msgKey, new Object());
+      logger.logrb(Level.INFO, null, null, bundle, msgKey, "message key test");
+      logger.logrb(Level.INFO, null, null, bundle, null, "message key test");
+      logger.logrb(Level.INFO, null, null, null, msgKey, "");
+      logger.logrb(Level.INFO, null, null, null, null, "");
+      logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey, obj);
+      logger.logrb(Level.INFO, "testClass", "testMethod", null, null, obj);
+
+      // test method logrb(Level, String, String, String, String, Object[])
+      Object[] objects = null;
+      logger.logrb(Level.INFO, null, null, bundle, msgKey, new Object[] {});
+      logger.logrb(Level.INFO, null, null, bundle, null, new Object[] { 
"message key test" });
+      logger.logrb(Level.INFO, null, null, null, msgKey, new Object[] { "" });
+      logger.logrb(Level.INFO, null, null, null, null, new Object[] { "" });
+      logger.logrb(Level.INFO, null, null, null, null, new Object[] { null });
+      logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey, 
objects);
+      logger.logrb(Level.INFO, "testClass", "testMethod", null, null, objects);
+
+      // test method logrb(Level, String, String, String, String, thrown)
+      Throwable thrown = new Throwable();
+      logger.setLevel(Level.WARNING); // Don't log the expected exceptions
+      logger.logrb(Level.INFO, null, null, bundle, msgKey, thrown);
+      logger.logrb(Level.INFO, null, null, bundle, null, thrown);
+      logger.logrb(Level.INFO, null, null, null, msgKey, thrown);
+      logger.logrb(Level.INFO, null, null, null, null, thrown);
+      thrown = null;
+      logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey, 
thrown);
+      logger.logrb(Level.INFO, "testClass", "testMethod", null, null, thrown);
+
+      // https://issues.apache.org/jira/browse/UIMA-5719
+      logger.logrb(Level.WARNING, "testClass", "testMethod", 
"org.apache.uima.impl.log_messages",
+              "UIMA_external_override_ignored__CONFIG", new Object[] { "n1", 
"${abc}" });
+    } finally {
+      logger.setLevel(Level.INFO);
+    }
   }
 }
diff --git 
a/uimaj-core/src/test/java/org/apache/uima/util/impl/Log4jLogger_implTest.java 
b/uimaj-core/src/test/java/org/apache/uima/util/impl/Log4jLogger_implTest.java
index 79ba1da..cbd4d35 100644
--- 
a/uimaj-core/src/test/java/org/apache/uima/util/impl/Log4jLogger_implTest.java
+++ 
b/uimaj-core/src/test/java/org/apache/uima/util/impl/Log4jLogger_implTest.java
@@ -34,192 +34,148 @@ import junit.framework.TestCase;
  */
 public class Log4jLogger_implTest extends TestCase {
 
-   @Override
+  @Override
   public void setUp() throws Exception {
-//      BasicConfigurator.configure();
-   }
+    // BasicConfigurator.configure();
+  }
 
-   @Override
+  @Override
   public void tearDown() throws Exception {
-//      BasicConfigurator.resetConfiguration();
-   }
-
-//   private static HashMap<String, Level> logLevels = new HashMap<String, 
Level>(
-//         9);
-//   static {
-//      logLevels.put("OFF", Level.OFF);
-//      logLevels.put("ERROR", Level.SEVERE);
-//      logLevels.put("WARN", Level.WARNING);
-//      logLevels.put("INFO", Level.INFO);
-//      logLevels.put("INFO", Level.CONFIG);
-//      logLevels.put("DEBUG", Level.FINE);
-//      logLevels.put("ALL", Level.FINER);
-//      logLevels.put("ALL", Level.FINEST);
-//      logLevels.put("ALL", Level.ALL);
-//   }
-
-   public void testLogWrapperCreation() throws Exception {
-      org.apache.uima.util.Logger uimaLogger = Log4jLogger_impl.getInstance();
-      org.apache.uima.util.Logger classLogger = Log4jLogger_impl
-            .getInstance(this.getClass());
-
-      // check base configuration
-      assertNotNull(uimaLogger);
-      assertNotNull(classLogger);
-      assertTrue(uimaLogger.isLoggable(Level.INFO));
-      assertTrue(classLogger.isLoggable(Level.INFO));
-      classLogger.log("ola");
-      classLogger.log(Level.INFO, "OLA in info");
-
-      uimaLogger.log(Level.INFO, "UIMA OLA in info");
-      https://issues.apache.org/jira/browse/UIMA-5719
-      uimaLogger.logrb(Level.WARNING, "testClass", "testMethod", 
"org.apache.uima.impl.log_messages", "UIMA_external_override_ignored__CONFIG", 
new Object[] { "n1", "${abc}" });
-   }
-
-   public void testIsLoggable() throws Exception {
-      // create logger
-     org.apache.uima.util.Logger uimaLogger = null;
-      try {
-        uimaLogger = Log4jLogger_impl.getInstance();
-      } catch (Exception e) {
-        System.err.println(e);
-        e.printStackTrace(System.err);
-        throw e;
-      }
-      org.apache.uima.util.Logger classLogger = Log4jLogger_impl
-            .getInstance(this.getClass());
-
-      assertNotNull(uimaLogger);
-      assertNotNull(classLogger);
-      Logger log4jLogger = 
org.apache.logging.log4j.LogManager.getLogger("org.apache.uima");
-      while (log4jLogger.getLevel() == null) {
-         log4jLogger = LogManager.getRootLogger();
-      }
-
-      String key = "INFO"; // log4jLogger.getLevel().toString();
-
-      Level defaultLogLevel = Level.INFO; // logLevels.get(key); // doesn't 
work
-
-      assertNotNull(defaultLogLevel);
-      // check message logging for root logger based on default log level
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.ALL), uimaLogger
-            .isLoggable(Level.ALL));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINEST), uimaLogger
-            .isLoggable(Level.FINEST));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINER), uimaLogger
-            .isLoggable(Level.FINER));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINE), uimaLogger
-            .isLoggable(Level.FINE));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.CONFIG), uimaLogger
-            .isLoggable(Level.CONFIG));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.INFO), uimaLogger
-            .isLoggable(Level.INFO));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.WARNING), uimaLogger
-            .isLoggable(Level.WARNING));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.SEVERE), uimaLogger
-            .isLoggable(Level.SEVERE));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.OFF), uimaLogger
-            .isLoggable(Level.OFF));
-
-      // check message logging for class logger based on default log level
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.ALL), classLogger
-            .isLoggable(Level.ALL));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINEST), classLogger
-            .isLoggable(Level.FINEST));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINER), classLogger
-            .isLoggable(Level.FINER));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINE), classLogger
-            .isLoggable(Level.FINE));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.CONFIG), classLogger
-            .isLoggable(Level.CONFIG));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.INFO), classLogger
-            .isLoggable(Level.INFO));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.WARNING), classLogger
-            .isLoggable(Level.WARNING));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.SEVERE), classLogger
-            .isLoggable(Level.SEVERE));
-      assertEquals(defaultLogLevel.isGreaterOrEqual(Level.OFF), classLogger
-            .isLoggable(Level.OFF));
-
-      // reset class logger level to OFF
-      // 
Logger.getLogger(this.getClass().getName()).setLevel(java.util.logging.Level.OFF);
-      classLogger.setLevel(Level.OFF);
-      assertFalse(classLogger.isLoggable(Level.ALL));
-      assertFalse(classLogger.isLoggable(Level.FINEST));
-      assertFalse(classLogger.isLoggable(Level.FINER));
-      assertFalse(classLogger.isLoggable(Level.FINE));
-      assertFalse(classLogger.isLoggable(Level.CONFIG));
-      assertFalse(classLogger.isLoggable(Level.INFO));
-      assertFalse(classLogger.isLoggable(Level.WARNING));
-      assertFalse(classLogger.isLoggable(Level.SEVERE));
-      assertTrue(classLogger.isLoggable(Level.OFF));
-
-      // reset class logger level to ALL
-      // 
Logger.getLogger(this.getClass().getName()).setLevel(java.util.logging.Level.ALL);
-      classLogger.setLevel(Level.ALL);
-      assertTrue(classLogger.isLoggable(Level.ALL));
-      assertTrue(classLogger.isLoggable(Level.FINEST));
-      assertTrue(classLogger.isLoggable(Level.FINER));
-      assertTrue(classLogger.isLoggable(Level.FINE));
-      assertTrue(classLogger.isLoggable(Level.CONFIG));
-      assertTrue(classLogger.isLoggable(Level.INFO));
-      assertTrue(classLogger.isLoggable(Level.WARNING));
-      assertTrue(classLogger.isLoggable(Level.SEVERE));
-      assertTrue(classLogger.isLoggable(Level.OFF));
-
-      // reset class logger level to WARNING
-      // 
Logger.getLogger(this.getClass().getName()).setLevel(java.util.logging.Level.WARNING);
-      classLogger.setLevel(Level.WARNING);
-      assertFalse(classLogger.isLoggable(Level.ALL));
-      assertFalse(classLogger.isLoggable(Level.FINEST));
-      assertFalse(classLogger.isLoggable(Level.FINER));
-      assertFalse(classLogger.isLoggable(Level.FINE));
-      assertFalse(classLogger.isLoggable(Level.CONFIG));
-      assertFalse(classLogger.isLoggable(Level.INFO));
-      assertTrue(classLogger.isLoggable(Level.WARNING));
-      assertTrue(classLogger.isLoggable(Level.SEVERE));
-      assertTrue(classLogger.isLoggable(Level.OFF));
-
-      // reset log level to default log level
-      classLogger.setLevel(defaultLogLevel);
-   }
-
-   public void testMessageLogMethods() throws Exception {
-//     final List<LoggingEvent> records = new ArrayList<LoggingEvent>();
-     final int[] nbrcalls = new int[1];
-     nbrcalls[0] = 0;
-     
-     // Tell the logger to log everything
-//     long start = System.nanoTime();
-     org.apache.logging.log4j.core.Logger rootLogger = 
(org.apache.logging.log4j.core.Logger) 
org.apache.logging.log4j.LogManager.getRootLogger();
-//     System.out.format("debug time to init logger is %f%n ",  
((double)(System.nanoTime() - start)) / 1000000000.0d);
-     rootLogger.get().setLevel(org.apache.logging.log4j.Level.ALL);
-     rootLogger.getContext().updateLoggers();
-//     Configurator.setLevel(null, org.apache.logging.log4j.Level.ALL);
-//     final LoggerContext loggerContext = LoggerContext.getContext(false);
-//     final LoggerConfig loggerConfig = 
loggerContext.getConfiguration().getRootLogger();
-//     
-//     Appender appender = (Appender) 
rootLogger.getAllAppenders().nextElement();
-     // Capture the logging output without actually logging it
-//     ConsoleAppender app = (ConsoleAppender) 
rootLogger.getAppenders().values().stream().findFirst().get();
-     // add the filter to the shared Logger Context appender
-     ConsoleAppender app = (ConsoleAppender) 
rootLogger.get().getAppenders().values().stream().findFirst().get();
-     Filter filter = new AbstractFilter() {
-       @Override
-       public Result filter(LogEvent event) {
-         nbrcalls[0] ++;
-         StackTraceElement ste = event.getSource();
-         System.out.printf("[%s:%s] %s%n", ste.getFileName(), 
ste.getLineNumber(), event.getMessage().getFormattedMessage());
-         assertEquals(Log4jLogger_implTest.this.getClass().getName() , 
ste.getClassName());
-         return Result.DENY;
-       }
-     };
-     
-     app.addFilter(filter);
-
-     try {
-      // create Logger
-       // debug
+    // BasicConfigurator.resetConfiguration();
+  }
+
+  // private static HashMap<String, Level> logLevels = new HashMap<String, 
Level>(
+  // 9);
+  // static {
+  // logLevels.put("OFF", Level.OFF);
+  // logLevels.put("ERROR", Level.SEVERE);
+  // logLevels.put("WARN", Level.WARNING);
+  // logLevels.put("INFO", Level.INFO);
+  // logLevels.put("INFO", Level.CONFIG);
+  // logLevels.put("DEBUG", Level.FINE);
+  // logLevels.put("ALL", Level.FINER);
+  // logLevels.put("ALL", Level.FINEST);
+  // logLevels.put("ALL", Level.ALL);
+  // }
+
+  public void testLogWrapperCreation() throws Exception {
+    org.apache.uima.util.Logger uimaLogger = Log4jLogger_impl.getInstance();
+    org.apache.uima.util.Logger classLogger = 
Log4jLogger_impl.getInstance(this.getClass());
+
+    // check base configuration
+    assertNotNull(uimaLogger);
+    assertNotNull(classLogger);
+    assertTrue(uimaLogger.isLoggable(Level.INFO));
+    assertTrue(classLogger.isLoggable(Level.INFO));
+    classLogger.log("ola");
+    classLogger.log(Level.INFO, "OLA in info");
+
+    uimaLogger.log(Level.INFO, "UIMA OLA in info");
+    https: // issues.apache.org/jira/browse/UIMA-5719
+    uimaLogger.logrb(Level.WARNING, "testClass", "testMethod", 
"org.apache.uima.impl.log_messages",
+            "UIMA_external_override_ignored__CONFIG", new Object[] { "n1", 
"${abc}" });
+  }
+
+  public void testIsLoggable() throws Exception {
+    // create logger
+    org.apache.uima.util.Logger uimaLogger = null;
+    try {
+      uimaLogger = Log4jLogger_impl.getInstance();
+    } catch (Exception e) {
+      System.err.println(e);
+      e.printStackTrace(System.err);
+      throw e;
+    }
+    org.apache.uima.util.Logger classLogger = 
Log4jLogger_impl.getInstance(this.getClass());
+
+    assertNotNull(uimaLogger);
+    assertNotNull(classLogger);
+    Logger log4jLogger = 
org.apache.logging.log4j.LogManager.getLogger("org.apache.uima");
+    while (log4jLogger.getLevel() == null) {
+      log4jLogger = LogManager.getRootLogger();
+    }
+
+    String key = "INFO"; // log4jLogger.getLevel().toString();
+
+    Level defaultLogLevel = Level.INFO; // logLevels.get(key); // doesn't work
+
+    assertNotNull(defaultLogLevel);
+    // check message logging for root logger based on default log level
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.ALL), 
uimaLogger.isLoggable(Level.ALL));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINEST),
+            uimaLogger.isLoggable(Level.FINEST));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINER), 
uimaLogger.isLoggable(Level.FINER));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINE), 
uimaLogger.isLoggable(Level.FINE));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.CONFIG),
+            uimaLogger.isLoggable(Level.CONFIG));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.INFO), 
uimaLogger.isLoggable(Level.INFO));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.WARNING),
+            uimaLogger.isLoggable(Level.WARNING));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.SEVERE),
+            uimaLogger.isLoggable(Level.SEVERE));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.OFF), 
uimaLogger.isLoggable(Level.OFF));
+
+    // check message logging for class logger based on default log level
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.ALL), 
classLogger.isLoggable(Level.ALL));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINEST),
+            classLogger.isLoggable(Level.FINEST));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINER),
+            classLogger.isLoggable(Level.FINER));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.FINE), 
classLogger.isLoggable(Level.FINE));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.CONFIG),
+            classLogger.isLoggable(Level.CONFIG));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.INFO), 
classLogger.isLoggable(Level.INFO));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.WARNING),
+            classLogger.isLoggable(Level.WARNING));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.SEVERE),
+            classLogger.isLoggable(Level.SEVERE));
+    assertEquals(defaultLogLevel.isGreaterOrEqual(Level.OFF), 
classLogger.isLoggable(Level.OFF));
+
+    // reset class logger level to OFF
+    // 
Logger.getLogger(this.getClass().getName()).setLevel(java.util.logging.Level.OFF);
+    classLogger.setLevel(Level.OFF);
+    assertFalse(classLogger.isLoggable(Level.ALL));
+    assertFalse(classLogger.isLoggable(Level.FINEST));
+    assertFalse(classLogger.isLoggable(Level.FINER));
+    assertFalse(classLogger.isLoggable(Level.FINE));
+    assertFalse(classLogger.isLoggable(Level.CONFIG));
+    assertFalse(classLogger.isLoggable(Level.INFO));
+    assertFalse(classLogger.isLoggable(Level.WARNING));
+    assertFalse(classLogger.isLoggable(Level.SEVERE));
+    assertTrue(classLogger.isLoggable(Level.OFF));
+
+    // reset class logger level to ALL
+    // 
Logger.getLogger(this.getClass().getName()).setLevel(java.util.logging.Level.ALL);
+    classLogger.setLevel(Level.ALL);
+    assertTrue(classLogger.isLoggable(Level.ALL));
+    assertTrue(classLogger.isLoggable(Level.FINEST));
+    assertTrue(classLogger.isLoggable(Level.FINER));
+    assertTrue(classLogger.isLoggable(Level.FINE));
+    assertTrue(classLogger.isLoggable(Level.CONFIG));
+    assertTrue(classLogger.isLoggable(Level.INFO));
+    assertTrue(classLogger.isLoggable(Level.WARNING));
+    assertTrue(classLogger.isLoggable(Level.SEVERE));
+    assertTrue(classLogger.isLoggable(Level.OFF));
+
+    // reset class logger level to WARNING
+    // 
Logger.getLogger(this.getClass().getName()).setLevel(java.util.logging.Level.WARNING);
+    classLogger.setLevel(Level.WARNING);
+    assertFalse(classLogger.isLoggable(Level.ALL));
+    assertFalse(classLogger.isLoggable(Level.FINEST));
+    assertFalse(classLogger.isLoggable(Level.FINER));
+    assertFalse(classLogger.isLoggable(Level.FINE));
+    assertFalse(classLogger.isLoggable(Level.CONFIG));
+    assertFalse(classLogger.isLoggable(Level.INFO));
+    assertTrue(classLogger.isLoggable(Level.WARNING));
+    assertTrue(classLogger.isLoggable(Level.SEVERE));
+    assertTrue(classLogger.isLoggable(Level.OFF));
+
+    // reset log level to default log level
+    classLogger.setLevel(defaultLogLevel);
+  }
+
+  public void testMessageLogMethods() throws Exception {
+    try (Log4JMessageCapture capture = new Log4JMessageCapture()) {
       org.apache.uima.util.Logger tempLogger = null;
       try {
         tempLogger = Log4jLogger_impl.getInstance(getClass());
@@ -229,18 +185,9 @@ public class Log4jLogger_implTest extends TestCase {
         System.err.println("debug finished stacktrace");
         throw e;
       }
+
       final org.apache.uima.util.Logger logger = tempLogger;
-      // reset log level to INFO
       logger.setLevel(Level.INFO);
-//      Configurator.setLevel("Console", org.apache.logging.log4j.Level.INFO);
-
-      // File file = File.createTempFile("LoggingTest","log");
-      // file.deleteOnExit();
-
-      // change output temporary file
-      // logger.setOutputStream(new PrintStream(new FileOutputStream(file)));
-
-      // log test with method log(Level,String)
 
       logger.log(Level.INFO, "My first test message");
       logger.log(Level.INFO, "");
@@ -273,11 +220,12 @@ public class Log4jLogger_implTest extends TestCase {
       logger.log(Level.INFO, "My fourth test message", thrown);
 
       new Runnable() {
+        @Override
         public void run() {
           logger.log(getClass().getName(), Level.INFO, "Message from wrapper", 
null);
         }
       }.run();
-      
+
       // test deprecated log method
       logger.log("My fifth test message");
       logger.log("");
@@ -287,151 +235,149 @@ public class Log4jLogger_implTest extends TestCase {
       Exception ex = new Exception("My sixth test message");
       logger.logException(ex);
       logger.logException(null);
-      
-      assertEquals(16, nbrcalls[0]);  // all calls except those with null or 
"" msgs (including non-null throwable/exception)
+
+      // all calls except those with null or "" msgs (including non-null 
throwable/exception)
+      assertEquals(16, capture.getAllEvents().size());
+
       // https://issues.apache.org/jira/browse/UIMA-5719
-      logger.logrb(Level.WARNING, "testClass", "testMethod", 
"org.apache.uima.impl.log_messages", "UIMA_external_override_ignored__CONFIG", 
new Object[] { "n1", "${abc}" });
-      
-     } finally {
-       app.removeFilter(filter);
-     }
-
-   }
-
-   
-   public void testMessageKeyLogMethods() throws Exception {
-     final int[] nbrcalls = new int[1];
-     nbrcalls[0] = 0;
-     
-     // Tell the logger to log everything
-     org.apache.logging.log4j.core.Logger rootLogger = 
(org.apache.logging.log4j.core.Logger) 
org.apache.logging.log4j.LogManager.getRootLogger();
-     // create Logger
-     org.apache.uima.util.Logger logger = Log4jLogger_impl.getInstance();
-  
-     try {
-     rootLogger.get().setLevel(org.apache.logging.log4j.Level.ALL);
-     rootLogger.getContext().updateLoggers();
-//     Appender appender = (Appender) 
rootLogger.getAllAppenders().nextElement();
-     // Capture the logging output without actually logging it
-//     appender.addFilter(new org.apache.logging.log4j.spi.Filter() {
-     
-     Filter filter = new AbstractFilter() {
-       @Override
-       public Result filter(LogEvent event) { 
-         nbrcalls[0] ++;
-         StackTraceElement ste = event.getSource();
-         System.out.printf("[%s:%s] %s%n", ste.getFileName(), 
ste.getLineNumber(), event.getMessage().getFormattedMessage());
-         
assertEquals(Log4jLogger_implTest.this.getClass().getSimpleName()+".java", 
ste.getFileName());
-         return Result.DENY;
-       }
-    }; 
-     
-     ConsoleAppender app = (ConsoleAppender) 
rootLogger.get().getAppenders().values().stream().findFirst().get();
-     app.addFilter(filter);
-     try {
-//       @Override
-//       public int decide(LoggingEvent event) {
-//         nbrcalss[0] ++;
-//         LocationInfo l = event.getLocationInformation();
-//         System.out.printf("[%s:%s] %s%n", l.getFileName(), 
l.getLineNumber(), event.getMessage());
-//         
assertEquals(TestLog4jLogger_impl.this.getClass().getSimpleName()+".java", 
-//                 l.getFileName());
-//         return org.apache.logging.log4j.spi.Filter.DENY;
-//       }
-//     }); 
-
-      // reset log level to INFO
-      logger.setLevel(Level.INFO);
+      logger.logrb(Level.WARNING, "testClass", "testMethod", 
"org.apache.uima.impl.log_messages",
+              "UIMA_external_override_ignored__CONFIG", new Object[] { "n1", 
"${abc}" });
+    }
+  }
+
+  public void testMessageKeyLogMethods() throws Exception {
+    final int[] nbrcalls = new int[1];
+    nbrcalls[0] = 0;
+
+    // Tell the logger to log everything
+    org.apache.logging.log4j.core.Logger rootLogger = 
(org.apache.logging.log4j.core.Logger) org.apache.logging.log4j.LogManager
+            .getRootLogger();
+    // create Logger
+    org.apache.uima.util.Logger logger = Log4jLogger_impl.getInstance();
+
+    try {
+      rootLogger.get().setLevel(org.apache.logging.log4j.Level.ALL);
+      rootLogger.getContext().updateLoggers();
+      // Appender appender = (Appender) 
rootLogger.getAllAppenders().nextElement();
+      // Capture the logging output without actually logging it
+      // appender.addFilter(new org.apache.logging.log4j.spi.Filter() {
+
+      Filter filter = new AbstractFilter() {
+        @Override
+        public Result filter(LogEvent event) {
+          nbrcalls[0]++;
+          StackTraceElement ste = event.getSource();
+          System.out.printf("[%s:%s] %s%n", ste.getFileName(), 
ste.getLineNumber(),
+                  event.getMessage().getFormattedMessage());
+          assertEquals(Log4jLogger_implTest.this.getClass().getSimpleName() + 
".java",
+                  ste.getFileName());
+          return Result.DENY;
+        }
+      };
 
-      // File file = File.createTempFile("LoggingTest","log");
-      // file.deleteOnExit();
-
-      // change output temporary file
-      // logger.setOutputStream(new PrintStream(new FileOutputStream(file)));
-
-      // test deprecated log(String, String, Object[])
-      String msgKey = "UIMA_logger_test";
-      String bundle = "org.apache.uima.util.impl.logger_test_messages";
-      logger.log(bundle, msgKey, new Object[] { "message key test" });
-      logger.log(bundle, null, new Object[] { "message key test" });
-      logger.log(bundle, msgKey, new Object[] { "" });
-      logger.log(bundle, msgKey, new Object[] { null });
-
-      // test method logrb(Level, String, String, String, String)
-      logger.logrb(Level.INFO, null, null, bundle, msgKey);
-      logger.logrb(Level.INFO, null, null, bundle, null);
-      logger.logrb(Level.INFO, null, null, null, msgKey);
-      logger.logrb(Level.INFO, null, null, null, null);
-      logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey);
-      logger.logrb(Level.INFO, "testClass", "testMethod", null, null);
-
-      // test method logrb(Level, String, String, String, String, Object)
-      Object obj = null;
-      logger.logrb(Level.INFO, null, null, bundle, msgKey, new Object());
-      logger.logrb(Level.INFO, null, null, bundle, msgKey, "message key test");
-      logger.logrb(Level.INFO, null, null, bundle, null, "message key test");
-      logger.logrb(Level.INFO, null, null, null, msgKey, "");
-      logger.logrb(Level.INFO, null, null, null, null, "");
-      logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey, obj);
-      logger.logrb(Level.INFO, "testClass", "testMethod", null, null, obj);
-
-      // test method logrb(Level, String, String, String, String, Object[])
-      Object[] objects = null;
-      logger.logrb(Level.INFO, null, null, bundle, msgKey, new Object[] {});
-      logger.logrb(Level.INFO, null, null, bundle, null,
-            new Object[] { "message key test" });
-      logger.logrb(Level.INFO, null, null, null, msgKey, new Object[] { "" });
-      logger.logrb(Level.INFO, null, null, null, null, new Object[] { "" });
-      logger.logrb(Level.INFO, null, null, null, null, new Object[] { null });
-      logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey,
-            objects);
-      logger.logrb(Level.INFO, "testClass", "testMethod", null, null, objects);
-
-      // test method logrb(Level, String, String, String, String, thrown)
-      Throwable thrown = new Throwable();
-      logger.logrb(Level.INFO, null, null, bundle, msgKey, thrown);
-      logger.logrb(Level.INFO, null, null, bundle, null, thrown);
-      logger.logrb(Level.INFO, null, null, null, msgKey, thrown);
-      logger.logrb(Level.INFO, null, null, null, null, thrown);
-      thrown = null;
-      logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey,
-            thrown);
-      logger.logrb(Level.INFO, "testClass", "testMethod", null, null, thrown);
-
-      assertEquals(18, nbrcalls[0]);
-     } finally {
-       app.removeFilter(filter);  // otherwise, subsequent test's filter gets 
appended, not replace
-     }
-    
-     } finally {
-       logger.setLevel(Level.INFO);
-       rootLogger.setLevel(org.apache.logging.log4j.Level.INFO);
-     }
-   }
-
-   public void testLoggerFromUIMAFramework() {
-      org.apache.uima.util.Logger logger = UIMAFramework.getLogger(this
-            .getClass());
+      ConsoleAppender app = (ConsoleAppender) 
rootLogger.get().getAppenders().values().stream()
+              .findFirst().get();
+      app.addFilter(filter);
+      try {
+        // @Override
+        // public int decide(LoggingEvent event) {
+        // nbrcalss[0] ++;
+        // LocationInfo l = event.getLocationInformation();
+        // System.out.printf("[%s:%s] %s%n", l.getFileName(), 
l.getLineNumber(),
+        // event.getMessage());
+        // 
assertEquals(TestLog4jLogger_impl.this.getClass().getSimpleName()+".java",
+        // l.getFileName());
+        // return org.apache.logging.log4j.spi.Filter.DENY;
+        // }
+        // });
+
+        // reset log level to INFO
+        logger.setLevel(Level.INFO);
+
+        // File file = File.createTempFile("LoggingTest","log");
+        // file.deleteOnExit();
+
+        // change output temporary file
+        // logger.setOutputStream(new PrintStream(new FileOutputStream(file)));
+
+        // test deprecated log(String, String, Object[])
+        String msgKey = "UIMA_logger_test";
+        String bundle = "org.apache.uima.util.impl.logger_test_messages";
+        logger.log(bundle, msgKey, new Object[] { "message key test" });
+        logger.log(bundle, null, new Object[] { "message key test" });
+        logger.log(bundle, msgKey, new Object[] { "" });
+        logger.log(bundle, msgKey, new Object[] { null });
+
+        // test method logrb(Level, String, String, String, String)
+        logger.logrb(Level.INFO, null, null, bundle, msgKey);
+        logger.logrb(Level.INFO, null, null, bundle, null);
+        logger.logrb(Level.INFO, null, null, null, msgKey);
+        logger.logrb(Level.INFO, null, null, null, null);
+        logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey);
+        logger.logrb(Level.INFO, "testClass", "testMethod", null, null);
+
+        // test method logrb(Level, String, String, String, String, Object)
+        Object obj = null;
+        logger.logrb(Level.INFO, null, null, bundle, msgKey, new Object());
+        logger.logrb(Level.INFO, null, null, bundle, msgKey, "message key 
test");
+        logger.logrb(Level.INFO, null, null, bundle, null, "message key test");
+        logger.logrb(Level.INFO, null, null, null, msgKey, "");
+        logger.logrb(Level.INFO, null, null, null, null, "");
+        logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey, 
obj);
+        logger.logrb(Level.INFO, "testClass", "testMethod", null, null, obj);
+
+        // test method logrb(Level, String, String, String, String, Object[])
+        Object[] objects = null;
+        logger.logrb(Level.INFO, null, null, bundle, msgKey, new Object[] {});
+        logger.logrb(Level.INFO, null, null, bundle, null, new Object[] { 
"message key test" });
+        logger.logrb(Level.INFO, null, null, null, msgKey, new Object[] { "" 
});
+        logger.logrb(Level.INFO, null, null, null, null, new Object[] { "" });
+        logger.logrb(Level.INFO, null, null, null, null, new Object[] { null 
});
+        logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey, 
objects);
+        logger.logrb(Level.INFO, "testClass", "testMethod", null, null, 
objects);
+
+        // test method logrb(Level, String, String, String, String, thrown)
+        Throwable thrown = new Throwable();
+        logger.logrb(Level.INFO, null, null, bundle, msgKey, thrown);
+        logger.logrb(Level.INFO, null, null, bundle, null, thrown);
+        logger.logrb(Level.INFO, null, null, null, msgKey, thrown);
+        logger.logrb(Level.INFO, null, null, null, null, thrown);
+        thrown = null;
+        logger.logrb(Level.INFO, "testClass", "testMethod", bundle, msgKey, 
thrown);
+        logger.logrb(Level.INFO, "testClass", "testMethod", null, null, 
thrown);
+
+        assertEquals(18, nbrcalls[0]);
+      } finally {
+        app.removeFilter(filter); // otherwise, subsequent test's filter gets 
appended, not replace
+      }
 
+    } finally {
       logger.setLevel(Level.INFO);
+      rootLogger.setLevel(org.apache.logging.log4j.Level.INFO);
+    }
+  }
 
-      // File file = File.createTempFile("LoggingTest","log");
-      // file.deleteOnExit();
+  public void testLoggerFromUIMAFramework() {
+    org.apache.uima.util.Logger logger = 
UIMAFramework.getLogger(this.getClass());
 
-      // change output temporary file
-      // logger.setOutputStream(new PrintStream(new FileOutputStream(file)));
+    logger.setLevel(Level.INFO);
 
-      // log test with method log(Level,String)
-      logger.log(Level.INFO,
-            "------------------------------------------------------------");
-      logger.log(Level.INFO, "My first test message");
-      logger.log(Level.INFO, "message with \"{0}\"", "substitute");
-      logger.info("message with \"{}\"", "substitute");  // new logger style
-      logger.info("message with \"{}\"", new Object[] {"substitute"});  // new 
logger style
-      
-      // https://issues.apache.org/jira/browse/UIMA-5719
-      logger.logrb(Level.WARNING, "testClass", "testMethod", 
"org.apache.uima.impl.log_messages", "UIMA_external_override_ignored__CONFIG", 
new Object[] { "n1", "${abc}" });
+    // File file = File.createTempFile("LoggingTest","log");
+    // file.deleteOnExit();
+
+    // change output temporary file
+    // logger.setOutputStream(new PrintStream(new FileOutputStream(file)));
+
+    // log test with method log(Level,String)
+    logger.log(Level.INFO, 
"------------------------------------------------------------");
+    logger.log(Level.INFO, "My first test message");
+    logger.log(Level.INFO, "message with \"{0}\"", "substitute");
+    logger.info("message with \"{}\"", "substitute"); // new logger style
+    logger.info("message with \"{}\"", new Object[] { "substitute" }); // new 
logger style
 
+    // https://issues.apache.org/jira/browse/UIMA-5719
+    logger.logrb(Level.WARNING, "testClass", "testMethod", 
"org.apache.uima.impl.log_messages",
+            "UIMA_external_override_ignored__CONFIG", new Object[] { "n1", 
"${abc}" });
 
-   }
+  }
 }

Reply via email to