consistency with propertis config for logging

git-svn-id: https://svn.apache.org/repos/asf/openejb/trunk@1431796 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java b/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
index 8385aba..92e0a1a 100644
--- a/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
+++ b/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
@@ -32,6 +32,17 @@
 
     public LoggerCreator(final String channel) {
         name = channel;
+
+        // force eager init if config overrided
+        final Properties p = SystemInstance.get().getProperties();
+        final String levelName = p.getProperty("logging.level." + channel);
+        if (levelName != null) {
+            try {
+                call();
+            } catch (Exception e) {
+                // no-op
+            }
+        }
     }
 
     @Override
@@ -62,12 +73,16 @@
         return logger;
     }
 
+    public boolean isInit() {
+        return init;
+    }
+
     public static final class Get {
         private Get() {
             // no-op
         }
 
-        public static Logger exec(final LoggerCreator creator) {
+        private static Logger exec(final LoggerCreator creator) {
             try {
                 return creator.call();
             } catch (Exception e) { // shouldn't occur regarding the impl we use
@@ -78,10 +93,21 @@
         public static Logger exec(final LoggerCreator logger, final AtomicBoolean debug, final AtomicBoolean info) {
             final Logger l = exec(logger);
             if (!logger.init) {
-                debug.set(l.isLoggable(Level.FINE));
-                info.set(l.isLoggable(Level.INFO));
+                levels(logger, debug, info);
             }
             return l;
         }
+
+        public static void levels(final LoggerCreator lc, final AtomicBoolean debug, final AtomicBoolean info) {
+            final Logger l;
+            try {
+                l = lc.call();
+            } catch (Exception e) {
+                return;
+            }
+
+            debug.set(l.isLoggable(Level.FINE));
+            info.set(l.isLoggable(Level.INFO));
+        }
     }
 }
diff --git a/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALog.java b/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALog.java
index f611f29..e54b74d 100644
--- a/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALog.java
+++ b/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALog.java
@@ -32,6 +32,9 @@
 
     public JULOpenJPALog(final LoggerCreator delegate) {
         logger = delegate;
+        if (logger.isInit()) {
+            LoggerCreator.Get.levels(logger, debug, info);
+        }
     }
 
     private Logger logger() {
diff --git a/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java b/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
index 19605a1..7f779ef 100644
--- a/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
+++ b/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
@@ -30,6 +30,9 @@
 
     public JuliLogStream(LogCategory logCategory) {
         logger = new LoggerCreator(logCategory.getName());
+        if (logger.isInit()) {
+            LoggerCreator.Get.levels(logger, debug, info);
+        }
     }
 
     public boolean isFatalEnabled() {
@@ -57,7 +60,7 @@
     }
 
     public boolean isWarnEnabled() {
-        return LoggerCreator.Get.exec(logger).isLoggable(Level.WARNING);
+        return LoggerCreator.Get.exec(logger, debug, info).isLoggable(Level.WARNING);
     }
 
     public void warn(String message) {
@@ -69,7 +72,7 @@
     }
 
     public boolean isInfoEnabled() {
-        return LoggerCreator.Get.exec(logger).isLoggable(Level.INFO);
+        return LoggerCreator.Get.exec(logger, debug, info).isLoggable(Level.INFO);
     }
 
     public void info(String message) {
@@ -93,7 +96,7 @@
     }
 
     private void log(Level level, String message, Throwable t) {
-        final Logger log = LoggerCreator.Get.exec(logger);
+        final Logger log = LoggerCreator.Get.exec(logger, debug, info);
         if (log.isLoggable(level)) {
             LogRecord logRecord = new OpenEJBLogRecord(level, message);
             if (t != null) logRecord.setThrown(t);