Author: rmannibucau
Date: Fri Jan 11 01:38:03 2013
New Revision: 1431786
URL: http://svn.apache.org/viewvc?rev=1431786&view=rev
Log:
small optim on our logger + uniformization with openjpa jul logger
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALog.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALogFactory.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java?rev=1431786&view=auto
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
(added)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/LoggerCreator.java
Fri Jan 11 01:38:03 2013
@@ -0,0 +1,87 @@
+/*
+ * 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.openejb.log;
+
+import org.apache.openejb.loader.SystemInstance;
+
+import java.util.Properties;
+import java.util.concurrent.Callable;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public class LoggerCreator implements Callable<Logger> {
+ private final String name;
+ private Logger logger;
+ private volatile boolean init = false;
+
+ public LoggerCreator(final String channel) {
+ name = channel;
+ }
+
+ @Override
+ public Logger call() throws Exception {
+ if (logger == null) {
+ synchronized (this) { // no need of lock for this part
+ if (logger == null) {
+ try {
+ logger = Logger.getLogger(name);
+ } catch (Exception e) {
+ logger = Logger.getLogger(name); // try again
+ }
+
+ // if level set through properties force it
+ final Properties p = SystemInstance.get().getProperties();
+ final String levelName = p.getProperty("logging.level." +
logger.getName());
+ if (levelName != null) {
+ final Level level = Level.parse(levelName);
+ for (Handler handler : logger.getHandlers()) {
+ handler.setLevel(level);
+ }
+ }
+
+ init = true;
+ }
+ }
+ }
+ return logger;
+ }
+
+ public static final class Get {
+ private Get() {
+ // no-op
+ }
+
+ public static Logger exec(final LoggerCreator creator) {
+ try {
+ return creator.call();
+ } catch (Exception e) { // shouldn't occur regarding the impl we
use
+ return Logger.getLogger("default");
+ }
+ }
+
+ 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));
+ }
+ return l;
+ }
+ }
+}
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALog.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALog.java?rev=1431786&r1=1431785&r2=1431786&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALog.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALog.java
Fri Jan 11 01:38:03 2013
@@ -16,37 +16,36 @@
*/
package org.apache.openejb.openjpa;
+import org.apache.openejb.log.LoggerCreator;
import org.apache.openejb.util.JuliLogStream;
import org.apache.openjpa.lib.log.Log;
-import java.util.concurrent.Callable;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class JULOpenJPALog implements Log {
- private final Callable<Logger> logger;
+ private final LoggerCreator logger;
+ private final AtomicBoolean debug = new AtomicBoolean(false);
+ private final AtomicBoolean info = new AtomicBoolean(true);
- public JULOpenJPALog(final Callable<Logger> delegate) {
+ public JULOpenJPALog(final LoggerCreator delegate) {
logger = delegate;
}
private Logger logger() {
- try {
- return logger.call();
- } catch (Exception e) { // shouldn't occur regarding the impl we use
- return Logger.getLogger("default");
- }
+ return LoggerCreator.Get.exec(logger, debug, info);
}
@Override
public boolean isTraceEnabled() {
- return logger().isLoggable(Level.FINEST);
+ return debug.get();
}
@Override
public boolean isInfoEnabled() {
- return logger().isLoggable(Level.INFO);
+ return info.get();
}
@Override
@@ -66,12 +65,16 @@ public class JULOpenJPALog implements L
@Override
public void trace(Object o) {
- logger().log(record(o, Level.FINEST));
+ if (isTraceEnabled()) {
+ logger().log(record(o, Level.FINEST));
+ }
}
@Override
public void trace(Object o, Throwable t) {
- logger().log(record(o, t, Level.FINEST));
+ if (isTraceEnabled()) {
+ logger().log(record(o, t, Level.FINEST));
+ }
}
@Override
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALogFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALogFactory.java?rev=1431786&r1=1431785&r2=1431786&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALogFactory.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/openjpa/JULOpenJPALogFactory.java
Fri Jan 11 01:38:03 2013
@@ -16,40 +16,13 @@
*/
package org.apache.openejb.openjpa;
+import org.apache.openejb.log.LoggerCreator;
import org.apache.openjpa.lib.log.Log;
import org.apache.openjpa.lib.log.LogFactoryAdapter;
-import java.util.concurrent.Callable;
-import java.util.logging.Logger;
-
public class JULOpenJPALogFactory extends LogFactoryAdapter {
@Override
protected Log newLogAdapter(final String channel) {
return new JULOpenJPALog(new LoggerCreator(channel));
}
-
- private static class LoggerCreator implements Callable<Logger> {
- private final String name;
- private Logger logger;
-
- public LoggerCreator(final String channel) {
- name = channel;
- }
-
- @Override
- public Logger call() throws Exception {
- if (logger == null) {
- synchronized (this) { // no need of lock for this part
- if (logger == null) {
- try {
- logger = Logger.getLogger(name);
- } catch (Exception e) {
- logger = Logger.getLogger(name); // try again
- }
- }
- }
- }
- return logger;
- }
- }
}
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java?rev=1431786&r1=1431785&r2=1431786&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStream.java
Fri Jan 11 01:38:03 2013
@@ -16,33 +16,24 @@
*/
package org.apache.openejb.util;
-import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.log.LoggerCreator;
-import java.util.Properties;
-import java.util.logging.Handler;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.logging.Level;
import java.util.logging.LogRecord;
import java.util.logging.Logger;
public class JuliLogStream implements LogStream {
- protected Logger logger;
+ protected final LoggerCreator logger;
+ protected final AtomicBoolean debug = new AtomicBoolean(false);
+ protected final AtomicBoolean info = new AtomicBoolean(false);
public JuliLogStream(LogCategory logCategory) {
- logger = Logger.getLogger(logCategory.getName());
-
- // if level set through properties force it
- final Properties p = SystemInstance.get().getProperties();
- final String levelName = p.getProperty("logging.level." +
logger.getName());
- if (levelName == null) return;
-
- final Level level = Level.parse(levelName);
- for (Handler handler : logger.getHandlers()) {
- handler.setLevel(level);
- }
+ logger = new LoggerCreator(logCategory.getName());
}
public boolean isFatalEnabled() {
- return logger.isLoggable(Level.SEVERE);
+ return LoggerCreator.Get.exec(logger, debug,
info).isLoggable(Level.SEVERE);
}
public void fatal(String message) {
@@ -54,7 +45,7 @@ public class JuliLogStream implements Lo
}
public boolean isErrorEnabled() {
- return logger.isLoggable(Level.SEVERE);
+ return LoggerCreator.Get.exec(logger, debug,
info).isLoggable(Level.SEVERE);
}
public void error(String message) {
@@ -66,7 +57,7 @@ public class JuliLogStream implements Lo
}
public boolean isWarnEnabled() {
- return logger.isLoggable(Level.WARNING);
+ return LoggerCreator.Get.exec(logger).isLoggable(Level.WARNING);
}
public void warn(String message) {
@@ -78,7 +69,7 @@ public class JuliLogStream implements Lo
}
public boolean isInfoEnabled() {
- return logger.isLoggable(Level.INFO);
+ return LoggerCreator.Get.exec(logger).isLoggable(Level.INFO);
}
public void info(String message) {
@@ -90,7 +81,7 @@ public class JuliLogStream implements Lo
}
public boolean isDebugEnabled() {
- return logger.isLoggable(Level.FINE);
+ return debug.get();
}
public void debug(String message) {
@@ -102,10 +93,11 @@ public class JuliLogStream implements Lo
}
private void log(Level level, String message, Throwable t) {
- if (logger.isLoggable(level)) {
+ final Logger log = LoggerCreator.Get.exec(logger);
+ if (log.isLoggable(level)) {
LogRecord logRecord = new OpenEJBLogRecord(level, message);
if (t != null) logRecord.setThrown(t);
- logger.log(logRecord);
+ log.log(logRecord);
}
}
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java?rev=1431786&r1=1431785&r2=1431786&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Logger.java
Fri Jan 11 01:38:03 2013
@@ -252,13 +252,11 @@ public class Logger {
private final LogCategory category;
private final LogStream logStream;
private final String baseName;
- private final boolean debug;
public Logger(final LogCategory category, final LogStream logStream, final
String baseName) {
this.category = category;
this.logStream = logStream;
this.baseName = baseName;
- this.debug = logStream.isDebugEnabled(); // commonly used and can be
slow so cache it
}
public static Logger getInstance(final LogCategory category, final Class
clazz) {
@@ -349,7 +347,7 @@ public class Logger {
}
public boolean isDebugEnabled() {
- return debug;
+ return logStream.isDebugEnabled();
}
public boolean isErrorEnabled() {