Author: rmannibucau
Date: Fri Jul 20 18:36:23 2012
New Revision: 1363893
URL: http://svn.apache.org/viewvc?rev=1363893&view=rev
Log:
OPENEJB-1837 making openwebbeans following openejb.log.factory
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4jLoggerFactory.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Slf4jLoggerFactory.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/AbstractDelegatingLogger.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4jLogger.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Slf4jLogger.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStreamFactory.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Slf4jLogStreamFactory.java
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.embedded.logging.properties
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.standalone.logging.properties
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java?rev=1363893&r1=1363892&r2=1363893&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/DeployerEjb.java
Fri Jul 20 18:36:23 2012
@@ -184,6 +184,7 @@ public class DeployerEjb implements Depl
}
}
appInfo = configurationFactory.configureApplication(appModule);
+ appInfo.autoDeploy =
Boolean.parseBoolean(properties.getProperty("openejb.app.autodeploy", "false"));
if (properties != null &&
properties.containsKey(OPENEJB_DEPLOYER_FORCED_APP_ID_PROP)) {
appInfo.appId =
properties.getProperty(OPENEJB_DEPLOYER_FORCED_APP_ID_PROP);
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4jLoggerFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4jLoggerFactory.java?rev=1363893&view=auto
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4jLoggerFactory.java
(added)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Log4jLoggerFactory.java
Fri Jul 20 18:36:23 2012
@@ -0,0 +1,36 @@
+/**
+ * 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.cdi.logging;
+
+import org.apache.openejb.log.logger.Log4jLogger;
+import org.apache.webbeans.logger.WebBeansLoggerFactory;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.logging.Logger;
+
+public class Log4jLoggerFactory implements WebBeansLoggerFactory {
+ @Override
+ public Logger getLogger(Class<?> clazz, Locale desiredLocale) {
+ return new Log4jLogger(clazz.getName(),
ResourceBundle.getBundle("openwebbeans/Messages", desiredLocale).toString());
+ }
+
+ @Override
+ public Logger getLogger(Class<?> clazz) {
+ return new Log4jLogger(clazz.getName(), "openwebbeans/Messages");
+ }
+}
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Slf4jLoggerFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Slf4jLoggerFactory.java?rev=1363893&view=auto
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Slf4jLoggerFactory.java
(added)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/logging/Slf4jLoggerFactory.java
Fri Jul 20 18:36:23 2012
@@ -0,0 +1,36 @@
+/**
+ * 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.cdi.logging;
+
+import org.apache.openejb.log.logger.Slf4jLogger;
+import org.apache.webbeans.logger.WebBeansLoggerFactory;
+
+import java.util.Locale;
+import java.util.ResourceBundle;
+import java.util.logging.Logger;
+
+public class Slf4jLoggerFactory implements WebBeansLoggerFactory {
+ @Override
+ public Logger getLogger(Class<?> clazz, Locale desiredLocale) {
+ return new Slf4jLogger(clazz.getName(),
ResourceBundle.getBundle("openwebbeans/Messages", desiredLocale).toString());
+ }
+
+ @Override
+ public Logger getLogger(Class<?> clazz) {
+ return new Slf4jLogger(clazz.getName(), "openwebbeans/Messages");
+ }
+}
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/AbstractDelegatingLogger.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/AbstractDelegatingLogger.java?rev=1363893&view=auto
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/AbstractDelegatingLogger.java
(added)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/AbstractDelegatingLogger.java
Fri Jul 20 18:36:23 2012
@@ -0,0 +1,416 @@
+/**
+ * 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.logger;
+
+import java.util.Locale;
+import java.util.MissingResourceException;
+import java.util.ResourceBundle;
+import java.util.logging.Filter;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+import java.util.logging.Logger;
+
+/**
+ * java.util.logging.Logger implementation delegating to another framework.
+ * All methods can be used except:
+ * setLevel
+ * addHandler / getHandlers
+ * setParent / getParent
+ * setUseParentHandlers / getUseParentHandlers
+ *
+ * @author gnodet
+ */
+public abstract class AbstractDelegatingLogger extends Logger {
+
+ protected AbstractDelegatingLogger(String name, String resourceBundleName)
{
+ super(name, resourceBundleName);
+ }
+
+ public void log(LogRecord record) {
+ if (isLoggable(record.getLevel())) {
+ doLog(record);
+ }
+ }
+
+ public void log(Level level, String msg) {
+ if (isLoggable(level)) {
+ LogRecord lr = new LogRecord(level, msg);
+ doLog(lr);
+ }
+ }
+
+ public void log(Level level, String msg, Object param1) {
+ if (isLoggable(level)) {
+ LogRecord lr = new LogRecord(level, msg);
+ Object params[] = {param1 };
+ lr.setParameters(params);
+ doLog(lr);
+ }
+ }
+
+ public void log(Level level, String msg, Object params[]) {
+ if (isLoggable(level)) {
+ LogRecord lr = new LogRecord(level, msg);
+ lr.setParameters(params);
+ doLog(lr);
+ }
+ }
+
+ public void log(Level level, String msg, Throwable thrown) {
+ if (isLoggable(level)) {
+ LogRecord lr = new LogRecord(level, msg);
+ lr.setThrown(thrown);
+ doLog(lr);
+ }
+ }
+
+ public void logp(Level level, String sourceClass, String sourceMethod,
String msg) {
+ if (isLoggable(level)) {
+ LogRecord lr = new LogRecord(level, msg);
+ lr.setSourceClassName(sourceClass);
+ lr.setSourceMethodName(sourceMethod);
+ doLog(lr);
+ }
+ }
+
+ public void logp(Level level, String sourceClass, String sourceMethod,
String msg, Object param1) {
+ if (isLoggable(level)) {
+ LogRecord lr = new LogRecord(level, msg);
+ lr.setSourceClassName(sourceClass);
+ lr.setSourceMethodName(sourceMethod);
+ Object params[] = {param1 };
+ lr.setParameters(params);
+ doLog(lr);
+ }
+ }
+
+ public void logp(Level level, String sourceClass, String sourceMethod,
String msg, Object params[]) {
+ if (isLoggable(level)) {
+ LogRecord lr = new LogRecord(level, msg);
+ lr.setSourceClassName(sourceClass);
+ lr.setSourceMethodName(sourceMethod);
+ lr.setParameters(params);
+ doLog(lr);
+ }
+ }
+
+ public void logp(Level level, String sourceClass, String sourceMethod,
String msg, Throwable thrown) {
+ if (isLoggable(level)) {
+ LogRecord lr = new LogRecord(level, msg);
+ lr.setSourceClassName(sourceClass);
+ lr.setSourceMethodName(sourceMethod);
+ lr.setThrown(thrown);
+ doLog(lr);
+ }
+ }
+
+ public void logrb(Level level, String sourceClass, String sourceMethod,
String bundleName, String msg) {
+ if (isLoggable(level)) {
+ LogRecord lr = new LogRecord(level, msg);
+ lr.setSourceClassName(sourceClass);
+ lr.setSourceMethodName(sourceMethod);
+ doLog(lr, bundleName);
+ }
+ }
+
+ public void logrb(Level level, String sourceClass, String sourceMethod,
+ String bundleName, String msg, Object param1) {
+ if (isLoggable(level)) {
+ LogRecord lr = new LogRecord(level, msg);
+ lr.setSourceClassName(sourceClass);
+ lr.setSourceMethodName(sourceMethod);
+ Object params[] = {param1 };
+ lr.setParameters(params);
+ doLog(lr, bundleName);
+ }
+ }
+
+ public void logrb(Level level, String sourceClass, String sourceMethod,
+ String bundleName, String msg, Object params[]) {
+ if (isLoggable(level)) {
+ LogRecord lr = new LogRecord(level, msg);
+ lr.setSourceClassName(sourceClass);
+ lr.setSourceMethodName(sourceMethod);
+ lr.setParameters(params);
+ doLog(lr, bundleName);
+ }
+ }
+
+ public void logrb(Level level, String sourceClass, String sourceMethod,
+ String bundleName, String msg, Throwable thrown) {
+ if (isLoggable(level)) {
+ LogRecord lr = new LogRecord(level, msg);
+ lr.setSourceClassName(sourceClass);
+ lr.setSourceMethodName(sourceMethod);
+ lr.setThrown(thrown);
+ doLog(lr, bundleName);
+ }
+ }
+
+ public void entering(String sourceClass, String sourceMethod) {
+ if (isLoggable(Level.FINER)) {
+ logp(Level.FINER, sourceClass, sourceMethod, "ENTRY");
+ }
+ }
+
+ public void entering(String sourceClass, String sourceMethod, Object
param1) {
+ if (isLoggable(Level.FINER)) {
+ Object params[] = {param1 };
+ logp(Level.FINER, sourceClass, sourceMethod, "ENTRY {0}", params);
+ }
+ }
+
+ public void entering(String sourceClass, String sourceMethod, Object
params[]) {
+ if (isLoggable(Level.FINER)) {
+ String msg = "ENTRY";
+ if (params == null) {
+ logp(Level.FINER, sourceClass, sourceMethod, msg);
+ return;
+ }
+ StringBuilder builder = new StringBuilder(msg);
+ for (int i = 0; i < params.length; i++) {
+ builder.append(" {");
+ builder.append(Integer.toString(i));
+ builder.append("}");
+ }
+ logp(Level.FINER, sourceClass, sourceMethod, builder.toString(),
params);
+ }
+ }
+
+ public void exiting(String sourceClass, String sourceMethod) {
+ if (isLoggable(Level.FINER)) {
+ logp(Level.FINER, sourceClass, sourceMethod, "RETURN");
+ }
+ }
+
+ public void exiting(String sourceClass, String sourceMethod, Object
result) {
+ if (isLoggable(Level.FINER)) {
+ Object params[] = {result };
+ logp(Level.FINER, sourceClass, sourceMethod, "RETURN {0}", params);
+ }
+ }
+
+ public void throwing(String sourceClass, String sourceMethod, Throwable
thrown) {
+ if (isLoggable(Level.FINER)) {
+ LogRecord lr = new LogRecord(Level.FINER, "THROW");
+ lr.setSourceClassName(sourceClass);
+ lr.setSourceMethodName(sourceMethod);
+ lr.setThrown(thrown);
+ doLog(lr);
+ }
+ }
+
+ public void severe(String msg) {
+ if (isLoggable(Level.SEVERE)) {
+ LogRecord lr = new LogRecord(Level.SEVERE, msg);
+ doLog(lr);
+ }
+ }
+
+ public void warning(String msg) {
+ if (isLoggable(Level.WARNING)) {
+ LogRecord lr = new LogRecord(Level.WARNING, msg);
+ doLog(lr);
+ }
+ }
+
+ public void info(String msg) {
+ if (isLoggable(Level.INFO)) {
+ LogRecord lr = new LogRecord(Level.INFO, msg);
+ doLog(lr);
+ }
+ }
+
+ public void config(String msg) {
+ if (isLoggable(Level.CONFIG)) {
+ LogRecord lr = new LogRecord(Level.CONFIG, msg);
+ doLog(lr);
+ }
+ }
+
+ public void fine(String msg) {
+ if (isLoggable(Level.FINE)) {
+ LogRecord lr = new LogRecord(Level.FINE, msg);
+ doLog(lr);
+ }
+ }
+
+ public void finer(String msg) {
+ if (isLoggable(Level.FINER)) {
+ LogRecord lr = new LogRecord(Level.FINER, msg);
+ doLog(lr);
+ }
+ }
+
+ public void finest(String msg) {
+ if (isLoggable(Level.FINEST)) {
+ LogRecord lr = new LogRecord(Level.FINEST, msg);
+ doLog(lr);
+ }
+ }
+
+ public void setLevel(Level newLevel) throws SecurityException {
+ throw new UnsupportedOperationException();
+ }
+
+ public abstract Level getLevel();
+
+ public boolean isLoggable(Level level) {
+ Level l = getLevel();
+ return level.intValue() >= l.intValue() && l != Level.OFF;
+ }
+
+ protected boolean supportsHandlers() {
+ return false;
+ }
+
+ public synchronized void addHandler(Handler handler) throws
SecurityException {
+ if (supportsHandlers()) {
+ super.addHandler(handler);
+ return;
+ }
+ throw new UnsupportedOperationException();
+ }
+
+ public synchronized void removeHandler(Handler handler) throws
SecurityException {
+ if (supportsHandlers()) {
+ super.removeHandler(handler);
+ return;
+ }
+ throw new UnsupportedOperationException();
+ }
+
+ public synchronized Handler[] getHandlers() {
+ if (supportsHandlers()) {
+ return super.getHandlers();
+ }
+ throw new UnsupportedOperationException();
+ }
+
+ public synchronized void setUseParentHandlers(boolean useParentHandlers) {
+ if (supportsHandlers()) {
+ super.setUseParentHandlers(useParentHandlers);
+ return;
+ }
+ throw new UnsupportedOperationException();
+ }
+
+ public synchronized boolean getUseParentHandlers() {
+ if (supportsHandlers()) {
+ return super.getUseParentHandlers();
+ }
+ throw new UnsupportedOperationException();
+ }
+
+ public Logger getParent() {
+ return null;
+ }
+
+ public void setParent(Logger parent) {
+ throw new UnsupportedOperationException();
+ }
+
+ protected void doLog(LogRecord lr) {
+ lr.setLoggerName(getName());
+ String rbname = getResourceBundleName();
+ if (rbname != null) {
+ lr.setResourceBundleName(rbname);
+ lr.setResourceBundle(getResourceBundle());
+ }
+ internalLog(lr);
+ }
+
+ protected void doLog(LogRecord lr, String rbname) {
+ lr.setLoggerName(getName());
+ if (rbname != null) {
+ lr.setResourceBundleName(rbname);
+ lr.setResourceBundle(loadResourceBundle(rbname));
+ }
+ internalLog(lr);
+ }
+
+ protected void internalLog(LogRecord record) {
+ Filter filter = getFilter();
+ if (filter != null && !filter.isLoggable(record)) {
+ return;
+ }
+ String msg = formatMessage(record);
+ internalLogFormatted(msg, record);
+ }
+
+ protected abstract void internalLogFormatted(String msg, LogRecord record);
+
+ protected String formatMessage(LogRecord record) {
+ String format = record.getMessage();
+ ResourceBundle catalog = record.getResourceBundle();
+ if (catalog != null) {
+ try {
+ format = catalog.getString(record.getMessage());
+ } catch (MissingResourceException ex) {
+ format = record.getMessage();
+ }
+ }
+ try {
+ Object parameters[] = record.getParameters();
+ if (parameters == null || parameters.length == 0) {
+ return format;
+ }
+ if (format.indexOf("{0") >= 0 || format.indexOf("{1") >= 0
+ || format.indexOf("{2") >= 0 || format.indexOf("{3") >= 0)
{
+ return java.text.MessageFormat.format(format, parameters);
+ }
+ return format;
+ } catch (Exception ex) {
+ return format;
+ }
+ }
+
+ /**
+ * Load the specified resource bundle
+ *
+ * @param resourceBundleName
+ * the name of the resource bundle to load, cannot be null
+ * @return the loaded resource bundle.
+ * @throws java.util.MissingResourceException
+ * If the specified resource bundle can not be loaded.
+ */
+ static ResourceBundle loadResourceBundle(String resourceBundleName) {
+ // try context class loader to load the resource
+ ClassLoader cl = Thread.currentThread().getContextClassLoader();
+ if (null != cl) {
+ try {
+ return ResourceBundle.getBundle(resourceBundleName,
Locale.getDefault(), cl);
+ } catch (MissingResourceException e) {
+ // Failed to load using context classloader, ignore
+ }
+ }
+ // try system class loader to load the resource
+ cl = ClassLoader.getSystemClassLoader();
+ if (null != cl) {
+ try {
+ return ResourceBundle.getBundle(resourceBundleName,
Locale.getDefault(), cl);
+ } catch (MissingResourceException e) {
+ // Failed to load using system classloader, ignore
+ }
+ }
+ return null;
+ }
+
+}
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4jLogger.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4jLogger.java?rev=1363893&view=auto
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4jLogger.java
(added)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Log4jLogger.java
Fri Jul 20 18:36:23 2012
@@ -0,0 +1,197 @@
+/**
+ * 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.logger;
+
+import java.lang.reflect.Field;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+
+import org.apache.log4j.Appender;
+import org.apache.log4j.AppenderSkeleton;
+import org.apache.log4j.Priority;
+import org.apache.log4j.spi.LoggingEvent;
+
+/**
+ * java.util.logging.Logger implementation delegating to Log4j.
+ * All methods can be used except:
+ * setLevel
+ * addHandler / getHandlers
+ * setParent / getParent
+ * setUseParentHandlers / getUseParentHandlers
+ *
+ * @author gnodet
+ */
+public class Log4jLogger extends AbstractDelegatingLogger {
+ private static final Map<Level, org.apache.log4j.Level> TO_LOG4J = new
HashMap<Level, org.apache.log4j.Level>();
+ private static final org.apache.log4j.Level TRACE;
+
+ private final org.apache.log4j.Logger log;
+
+ static {
+ //older versions of log4j don't have TRACE, use debug
+ org.apache.log4j.Level t = org.apache.log4j.Level.DEBUG;
+ try {
+ Field f = org.apache.log4j.Level.class.getField("TRACE");
+ t = (org.apache.log4j.Level)f.get(null);
+ } catch (Throwable ex) {
+ //ignore, assume old version of log4j
+ }
+ TRACE = t;
+
+ TO_LOG4J.put(Level.ALL, org.apache.log4j.Level.ALL);
+ TO_LOG4J.put(Level.SEVERE, org.apache.log4j.Level.ERROR);
+ TO_LOG4J.put(Level.WARNING, org.apache.log4j.Level.WARN);
+ TO_LOG4J.put(Level.INFO, org.apache.log4j.Level.INFO);
+ TO_LOG4J.put(Level.CONFIG, org.apache.log4j.Level.DEBUG);
+ TO_LOG4J.put(Level.FINE, org.apache.log4j.Level.DEBUG);
+ TO_LOG4J.put(Level.FINER, TRACE);
+ TO_LOG4J.put(Level.FINEST, TRACE);
+ TO_LOG4J.put(Level.OFF, org.apache.log4j.Level.OFF);
+ }
+
+ public Log4jLogger(String name, String resourceBundleName) {
+ super(name, resourceBundleName);
+ log = org.apache.log4j.LogManager.getLogger(name);
+ }
+
+ public Level getLevel() {
+ org.apache.log4j.Level l = log.getEffectiveLevel();
+ if (l != null) {
+ return fromL4J(l);
+ }
+ return null;
+ }
+
+ public void setLevel(Level newLevel) throws SecurityException {
+ log.setLevel(TO_LOG4J.get(newLevel));
+ }
+
+ public synchronized void addHandler(Handler handler) throws
SecurityException {
+ log.addAppender(new HandlerWrapper(handler));
+ }
+ public synchronized void removeHandler(Handler handler) throws
SecurityException {
+ log.removeAppender("HandlerWrapper-" + handler.hashCode());
+ }
+ public synchronized Handler[] getHandlers() {
+ List<Handler> ret = new ArrayList<Handler>();
+ Enumeration<?> en = log.getAllAppenders();
+ while (en.hasMoreElements()) {
+ Appender ap = (Appender)en.nextElement();
+ if (ap instanceof HandlerWrapper) {
+ ret.add(((HandlerWrapper)ap).getHandler());
+ }
+ }
+ return ret.toArray(new Handler[ret.size()]);
+ }
+
+ protected void internalLogFormatted(String msg, LogRecord record) {
+ log.log(AbstractDelegatingLogger.class.getName(),
+ TO_LOG4J.get(record.getLevel()),
+ msg,
+ record.getThrown());
+ }
+
+
+ private Level fromL4J(org.apache.log4j.Level l) {
+ Level l2 = null;
+ switch (l.toInt()) {
+ case org.apache.log4j.Level.ALL_INT:
+ l2 = Level.ALL;
+ break;
+ case org.apache.log4j.Level.FATAL_INT:
+ l2 = Level.SEVERE;
+ break;
+ case org.apache.log4j.Level.ERROR_INT:
+ l2 = Level.SEVERE;
+ break;
+ case org.apache.log4j.Level.WARN_INT:
+ l2 = Level.WARNING;
+ break;
+ case org.apache.log4j.Level.INFO_INT:
+ l2 = Level.INFO;
+ break;
+ case org.apache.log4j.Level.DEBUG_INT:
+ l2 = Level.FINE;
+ break;
+ case org.apache.log4j.Level.OFF_INT:
+ l2 = Level.OFF;
+ break;
+ default:
+ if (l.toInt() == TRACE.toInt()) {
+ l2 = Level.FINEST;
+ }
+ }
+ return l2;
+ }
+
+
+ private class HandlerWrapper extends AppenderSkeleton {
+ Handler handler;
+
+ public HandlerWrapper(Handler h) {
+ handler = h;
+ name = "HandlerWrapper-" + h.hashCode();
+ }
+
+ public Handler getHandler() {
+ return handler;
+ }
+
+ @Override
+ protected void append(LoggingEvent event) {
+ LogRecord lr = new LogRecord(fromL4J(event.getLevel()),
+ event.getMessage().toString());
+ lr.setLoggerName(event.getLoggerName());
+ if (event.getThrowableInformation() != null) {
+ lr.setThrown(event.getThrowableInformation().getThrowable());
+ }
+ String rbname = getResourceBundleName();
+ if (rbname != null) {
+ lr.setResourceBundleName(rbname);
+ lr.setResourceBundle(getResourceBundle());
+ }
+ handler.publish(lr);
+ }
+
+ public void close() {
+ handler.close();
+ closed = true;
+ }
+
+ public boolean requiresLayout() {
+ return false;
+ }
+
+ @Override
+ public Priority getThreshold() {
+ return TO_LOG4J.get(handler.getLevel());
+ }
+ @Override
+ public boolean isAsSevereAsThreshold(Priority priority) {
+ Priority p = getThreshold();
+ return (p == null) || priority.isGreaterOrEqual(p);
+ }
+ }
+}
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Slf4jLogger.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Slf4jLogger.java?rev=1363893&view=auto
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Slf4jLogger.java
(added)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/log/logger/Slf4jLogger.java
Fri Jul 20 18:36:23 2012
@@ -0,0 +1,183 @@
+/**
+ * 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.logger;
+
+import java.util.logging.Handler;
+import java.util.logging.Level;
+import java.util.logging.LogRecord;
+
+import org.slf4j.spi.LocationAwareLogger;
+
+/**
+ * <p>
+ * java.util.logging.Logger implementation delegating to SLF4J.
+ * </p>
+ * <p>
+ * Methods {@link java.util.logging.Logger#setParent(Logger)}, {@link
java.util.logging.Logger#getParent()},
+ * {@link java.util.logging.Logger#setUseParentHandlers(boolean)} and
+ * {@link java.util.logging.Logger#getUseParentHandlers()} are not overrriden.
+ * </p>
+ * <p>
+ * Level mapping inspired by {@link org.slf4j.bridge.SLF4JBridgeHandler}:
+ * </p>
+ *
+ * <pre>
+ * FINEST -> TRACE
+ * FINER -> DEBUG
+ * FINE -> DEBUG
+ * CONFIG -> DEBUG
+ * INFO -> INFO
+ * WARN ING -> WARN
+ * SEVER -> ERROR
+ * </pre>
+ */
+public class Slf4jLogger extends AbstractDelegatingLogger {
+
+ private static final String FQCN =
AbstractDelegatingLogger.class.getName();
+
+ private final org.slf4j.Logger logger;
+ private LocationAwareLogger locationAwareLogger;
+
+
+ public Slf4jLogger(String name, String resourceBundleName) {
+ super(name, resourceBundleName);
+ logger = org.slf4j.LoggerFactory.getLogger(name);
+ if (logger instanceof LocationAwareLogger) {
+ locationAwareLogger = (LocationAwareLogger) logger;
+ }
+ }
+ @Override
+ protected boolean supportsHandlers() {
+ return true;
+ }
+
+ @Override
+ public Level getLevel() {
+ Level level;
+ // Verify from the wider (trace) to the narrower (error)
+ if (logger.isTraceEnabled()) {
+ level = Level.FINEST;
+ } else if (logger.isDebugEnabled()) {
+ // map to the lowest between FINER, FINE and CONFIG
+ level = Level.FINER;
+ } else if (logger.isInfoEnabled()) {
+ level = Level.INFO;
+ } else if (logger.isWarnEnabled()) {
+ level = Level.WARNING;
+ } else if (logger.isErrorEnabled()) {
+ level = Level.SEVERE;
+ } else {
+ level = Level.OFF;
+ }
+ return level;
+ }
+
+ @Override
+ public boolean isLoggable(Level level) {
+ final int i = level.intValue();
+ if (i == Level.OFF.intValue()) {
+ return false;
+ } else if (i >= Level.SEVERE.intValue()) {
+ return logger.isErrorEnabled();
+ } else if (i >= Level.WARNING.intValue()) {
+ return logger.isWarnEnabled();
+ } else if (i >= Level.INFO.intValue()) {
+ return logger.isInfoEnabled();
+ } else if (i >= Level.FINER.intValue()) {
+ return logger.isDebugEnabled();
+ }
+ return logger.isTraceEnabled();
+ }
+
+
+ @Override
+ protected void internalLogFormatted(String msg, LogRecord record) {
+
+ Level level = record.getLevel();
+ Throwable t = record.getThrown();
+
+ Handler targets[] = getHandlers();
+ if (targets != null) {
+ for (Handler h : targets) {
+ h.publish(record);
+ }
+ }
+ if (!getUseParentHandlers()) {
+ return;
+ }
+
+ /*
+ * As we can not use a "switch ... case" block but only a "if ... else
if ..." block, the order of the
+ * comparisons is important. We first try log level FINE then INFO,
WARN, FINER, etc
+ */
+ if (Level.FINE.equals(level)) {
+ if (locationAwareLogger == null) {
+ logger.debug(msg, t);
+ } else {
+ locationAwareLogger.log(null, FQCN,
LocationAwareLogger.DEBUG_INT, msg, null, t);
+ }
+ } else if (Level.INFO.equals(level)) {
+ if (locationAwareLogger == null) {
+ logger.info(msg, t);
+ } else {
+ locationAwareLogger.log(null, FQCN,
LocationAwareLogger.INFO_INT, msg, null, t);
+ }
+ } else if (Level.WARNING.equals(level)) {
+ if (locationAwareLogger == null) {
+ logger.warn(msg, t);
+ } else {
+ locationAwareLogger.log(null, FQCN,
LocationAwareLogger.WARN_INT, msg, null, t);
+ }
+ } else if (Level.FINER.equals(level)) {
+ if (locationAwareLogger == null) {
+ logger.trace(msg, t);
+ } else {
+ locationAwareLogger.log(null, FQCN,
LocationAwareLogger.DEBUG_INT, msg, null, t);
+ }
+ } else if (Level.FINEST.equals(level)) {
+ if (locationAwareLogger == null) {
+ logger.trace(msg, t);
+ } else {
+ locationAwareLogger.log(null, FQCN,
LocationAwareLogger.TRACE_INT, msg, null, t);
+ }
+ } else if (Level.ALL.equals(level)) {
+ // should never occur, all is used to configure java.util.logging
+ // but not accessible by the API Logger.xxx() API
+ if (locationAwareLogger == null) {
+ logger.error(msg, t);
+ } else {
+ locationAwareLogger.log(null, FQCN,
LocationAwareLogger.ERROR_INT, msg, null, t);
+ }
+ } else if (Level.SEVERE.equals(level)) {
+ if (locationAwareLogger == null) {
+ logger.error(msg, t);
+ } else {
+ locationAwareLogger.log(null, FQCN,
LocationAwareLogger.ERROR_INT, msg, null, t);
+ }
+ } else if (Level.CONFIG.equals(level)) {
+ if (locationAwareLogger == null) {
+ logger.debug(msg, t);
+ } else {
+ locationAwareLogger.log(null, FQCN,
LocationAwareLogger.DEBUG_INT, msg, null, t);
+ }
+ } else if (Level.OFF.equals(level)) {
+ // don't log
+ }
+ }
+}
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStreamFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStreamFactory.java?rev=1363893&r1=1363892&r2=1363893&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStreamFactory.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/JuliLogStreamFactory.java
Fri Jul 20 18:36:23 2012
@@ -17,11 +17,12 @@
package org.apache.openejb.util;
import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.log.ConsoleColorHandler;
+import org.apache.openejb.log.SingleLineFormatter;
+import org.apache.webbeans.logger.JULLoggerFactory;
import java.util.logging.ConsoleHandler;
import java.util.logging.LogManager;
-import org.apache.openejb.log.ConsoleColorHandler;
-import org.apache.openejb.log.SingleLineFormatter;
/**
* default conf = jre conf
@@ -58,6 +59,8 @@ public class JuliLogStreamFactory implem
} catch (Exception ignored) {
// no-op: openjpa is not at the classpath so don't trigger it
loading with our logger
}
+
+ System.setProperty("openwebbeans.logging.factory",
JULLoggerFactory.class.getName());
}
public static boolean isNotIDE() {
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java?rev=1363893&r1=1363892&r2=1363893&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Log4jLogStreamFactory.java
Fri Jul 20 18:36:23 2012
@@ -19,6 +19,7 @@ package org.apache.openejb.util;
import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.SimpleLayout;
+import org.apache.openejb.cdi.logging.Log4jLoggerFactory;
import org.apache.openejb.loader.FileUtils;
import org.apache.openejb.loader.IO;
import org.apache.openejb.loader.SystemInstance;
@@ -52,6 +53,7 @@ public class Log4jLogStreamFactory imple
// The fall back here is that if log4j.configuration system
property is set, then that configuration file will be used.
e.printStackTrace();
}
+ System.setProperty("openwebbeans.logging.factory",
Log4jLoggerFactory.class.getName());
}
private void configureInternal() throws IOException {
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Slf4jLogStreamFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Slf4jLogStreamFactory.java?rev=1363893&r1=1363892&r2=1363893&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Slf4jLogStreamFactory.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/util/Slf4jLogStreamFactory.java
Fri Jul 20 18:36:23 2012
@@ -16,6 +16,8 @@
*/
package org.apache.openejb.util;
+import org.apache.openejb.cdi.logging.Slf4jLoggerFactory;
+
/**
* Simple Slf4jLogStream, not much configuration needed, as slf4j is just a
facade
*
@@ -30,6 +32,8 @@ public class Slf4jLogStreamFactory imple
public Slf4jLogStreamFactory() {
System.setProperty("openjpa.Log", "slf4j");
System.setProperty("org.apache.cxf.Logger",
"org.apache.cxf.common.logging.Slf4jLogger");
+ System.setProperty("openwebbeans.logging.factory",
Slf4jLoggerFactory.class.getName());
+
// no need to configure internals:
// by default we are using JUL
// if the user set log4j he wants to configure it himself
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.embedded.logging.properties
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.embedded.logging.properties?rev=1363893&r1=1363892&r2=1363893&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.embedded.logging.properties
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.embedded.logging.properties
Fri Jul 20 18:36:23 2012
@@ -28,6 +28,8 @@ log4j.category.Transaction = war
log4j.category.org.apache.activemq = error
log4j.category.org.apache.geronimo = error
log4j.category.openjpa = warn
+log4j.category.OpenEJB.cdi = info
+log4j.category.org.apache.webbeans = info
log4j.appender.C = org.apache.log4j.ConsoleAppender
log4j.appender.C.layout = org.apache.log4j.SimpleLayout
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.standalone.logging.properties
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.standalone.logging.properties?rev=1363893&r1=1363892&r2=1363893&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.standalone.logging.properties
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/resources/log4j.standalone.logging.properties
Fri Jul 20 18:36:23 2012
@@ -44,6 +44,8 @@ log4j.category.axis = inf
log4j.category.axis2 = info,R
log4j.category.cxf = info,R
log4j.category.org.apache.cxf = info,R
+log4j.category.OpenEJB.cdi = info, R
+log4j.category.org.apache.webbeans = info,R
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.layout=org.apache.log4j.PatternLayout