You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by wo...@apache.org on 2011/07/22 05:18:19 UTC
svn commit: r1149443 - in /portals/jetspeed-2/portal/trunk: ./
components/jetspeed-portal/
components/jetspeed-portal/src/main/java/org/apache/jetspeed/logger/impl/
jetspeed-commons/src/main/java/org/apache/jetspeed/util/
Author: woonsan
Date: Fri Jul 22 03:18:18 2011
New Revision: 1149443
URL: http://svn.apache.org/viewvc?rev=1149443&view=rev
Log:
JS2-1254: Leveraging LocationAwareLogger or LoggerWrapper to keep the original logging location information
Modified:
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/pom.xml
portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/logger/impl/DefaultJetspeedLogger.java
portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/util/JetspeedLoggerUtil.java
portals/jetspeed-2/portal/trunk/pom.xml
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/pom.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/pom.xml?rev=1149443&r1=1149442&r2=1149443&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/pom.xml (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/pom.xml Fri Jul 22 03:18:18 2011
@@ -153,6 +153,10 @@
<artifactId>slf4j-api</artifactId>
</dependency>
<dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-ext</artifactId>
+ </dependency>
+ <dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
</dependency>
Modified: portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/logger/impl/DefaultJetspeedLogger.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/logger/impl/DefaultJetspeedLogger.java?rev=1149443&r1=1149442&r2=1149443&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/logger/impl/DefaultJetspeedLogger.java (original)
+++ portals/jetspeed-2/portal/trunk/components/jetspeed-portal/src/main/java/org/apache/jetspeed/logger/impl/DefaultJetspeedLogger.java Fri Jul 22 03:18:18 2011
@@ -18,133 +18,14 @@ package org.apache.jetspeed.logger.impl;
import org.apache.jetspeed.logger.JetspeedLogger;
import org.slf4j.Logger;
+import org.slf4j.ext.LoggerWrapper;
-public class DefaultJetspeedLogger implements JetspeedLogger
+public class DefaultJetspeedLogger extends LoggerWrapper implements JetspeedLogger
{
- private Logger logger;
-
+ private static final String FQCN = LoggerWrapper.class.getName();
+
public DefaultJetspeedLogger(final Logger logger)
{
- this.logger = logger;
- }
-
- public void debug(String msg)
- {
- logger.debug(msg);
- }
-
- public void debug(String format, Object arg)
- {
- logger.debug(format, arg);
- }
-
- public void debug(String format, Object arg1, Object arg2)
- {
- logger.debug(format, arg1, arg2);
- }
-
- public void debug(String format, Object[] argArray)
- {
- logger.debug(format, argArray);
- }
-
- public void debug(String msg, Throwable t)
- {
- logger.debug(msg, t);
- }
-
- public void error(String msg)
- {
- logger.error(msg);
- }
-
- public void error(String msg, Object arg)
- {
- logger.error(msg, arg);
- }
-
- public void error(String format, Object arg1, Object arg2)
- {
- logger.error(format, arg1, arg2);
- }
-
- public void error(String format, Object[] argArray)
- {
- logger.error(format, argArray);
- }
-
- public void error(String msg, Throwable t)
- {
- logger.error(msg, t);
- }
-
- public void info(String msg)
- {
- logger.info(msg);
- }
-
- public void info(String format, Object arg)
- {
- logger.info(format, arg);
- }
-
- public void info(String format, Object arg1, Object arg2)
- {
- logger.info(format, arg1, arg2);
- }
-
- public void info(String format, Object[] arg1)
- {
- logger.info(format, arg1);
- }
-
- public void info(String msg, Throwable t)
- {
- logger.info(msg, t);
- }
-
- public boolean isDebugEnabled()
- {
- return logger.isDebugEnabled();
- }
-
- public boolean isErrorEnabled()
- {
- return logger.isErrorEnabled();
- }
-
- public boolean isInfoEnabled()
- {
- return logger.isInfoEnabled();
- }
-
- public boolean isWarnEnabled()
- {
- return logger.isWarnEnabled();
- }
-
- public void warn(String msg)
- {
- logger.warn(msg);
- }
-
- public void warn(String format, Object arg)
- {
- logger.warn(format, arg);
- }
-
- public void warn(String format, Object[] argArray)
- {
- logger.warn(format, argArray);
- }
-
- public void warn(String format, Object arg1, Object arg2)
- {
- logger.warn(format, arg1, arg2);
- }
-
- public void warn(String msg, Throwable t)
- {
- logger.warn(msg, t);
+ super(logger, FQCN);
}
}
Modified: portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/util/JetspeedLoggerUtil.java
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/util/JetspeedLoggerUtil.java?rev=1149443&r1=1149442&r2=1149443&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/util/JetspeedLoggerUtil.java (original)
+++ portals/jetspeed-2/portal/trunk/jetspeed-commons/src/main/java/org/apache/jetspeed/util/JetspeedLoggerUtil.java Fri Jul 22 03:18:18 2011
@@ -42,6 +42,16 @@ public class JetspeedLoggerUtil
*/
public static final String DEFAULT_LOGGER_FACTORY_METHOD = "getLogger";
+ /**
+ * LocationAwareLogger SLF4J SPI Interface FQN
+ */
+ public static final String LOCATION_AWARE_LOGGER_FQN = "org.slf4j.spi.LocationAwareLogger";
+
+ /**
+ * SLF4J MessageFormatter FQN
+ */
+ public static final String MESSAGE_FORMATTER_FQN = "org.slf4j.helpers.MessageFormatter";
+
private static JetspeedLogger noopLogger = new NOOPJetspeedLogger();
private JetspeedLoggerUtil()
@@ -69,7 +79,9 @@ public class JetspeedLoggerUtil
if (logger != null)
{
- return new DelegatingByReflectionJetspeedLogger(logger);
+ Class<?> locationAwareLoggerClazz = Thread.currentThread().getContextClassLoader().loadClass(LOCATION_AWARE_LOGGER_FQN);
+ Class<?> messageFormatterClazz = Thread.currentThread().getContextClassLoader().loadClass(MESSAGE_FORMATTER_FQN);
+ return new DelegatingByReflectionJetspeedLogger(logger, locationAwareLoggerClazz.isAssignableFrom(logger.getClass()), locationAwareLoggerClazz, messageFormatterClazz);
}
}
catch (Exception e)
@@ -101,7 +113,9 @@ public class JetspeedLoggerUtil
if (logger != null)
{
- return new DelegatingByReflectionJetspeedLogger(logger);
+ Class<?> locationAwareLoggerClazz = Thread.currentThread().getContextClassLoader().loadClass(LOCATION_AWARE_LOGGER_FQN);
+ Class<?> messageFormatterClazz = Thread.currentThread().getContextClassLoader().loadClass(MESSAGE_FORMATTER_FQN);
+ return new DelegatingByReflectionJetspeedLogger(logger, locationAwareLoggerClazz.isAssignableFrom(logger.getClass()), locationAwareLoggerClazz, messageFormatterClazz);
}
}
catch (Exception e)
@@ -191,13 +205,40 @@ public class JetspeedLoggerUtil
{
private static final long serialVersionUID = 1L;
+ private final static String FQCN = DelegatingByReflectionJetspeedLogger.class.getName();
+
+ /* See org.slf4j.spi.LocationAwareLogger for the following log level constants */
+ private final static int DEBUG_INT = 10;
+ private final static int INFO_INT = 20;
+ private final static int WARN_INT = 30;
+ private final static int ERROR_INT = 40;
+
private Class<?> targetClazz;
private Object targetLogger;
+ private boolean locationAware;
+ private Method logcationAwareLoggerLogMethod;
+ private Class<?> formatterClazz;
+ private Method arrayFormatMethod;
- public DelegatingByReflectionJetspeedLogger(Object targetLogger)
+ public DelegatingByReflectionJetspeedLogger(Object targetLogger, boolean locationAware, Class<?> locationAwareLoggerClazz, Class<?> formatterClazz)
{
this.targetLogger = targetLogger;
this.targetClazz = targetLogger.getClass();
+ this.locationAware = locationAware;
+
+ if (locationAware)
+ {
+ for (Method method : locationAwareLoggerClazz.getMethods())
+ {
+ if ("log".equals(method.getName()) && method.getParameterTypes().length == 5)
+ {
+ logcationAwareLoggerLogMethod = method;
+ break;
+ }
+ }
+ }
+
+ this.formatterClazz = formatterClazz;
}
public boolean isDebugEnabled()
@@ -222,102 +263,254 @@ public class JetspeedLoggerUtil
public void debug(String msg)
{
- invokeLoggerMethod("debug", new Class [] { String.class }, msg);
+ if (locationAware)
+ {
+ invokeLocationAwareLoggerMethod(DEBUG_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("debug", new Class [] { String.class }, msg);
+ }
}
public void debug(String format, Object arg)
{
- invokeLoggerMethod("debug", new Class [] { String.class, Object.class }, format, arg);
+ if (locationAware)
+ {
+ String msg = arrayFormat(format, new Object [] { arg });
+ invokeLocationAwareLoggerMethod(DEBUG_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("debug", new Class [] { String.class, Object.class }, format, arg);
+ }
}
public void debug(String format, Object arg1, Object arg2)
{
- invokeLoggerMethod("debug", new Class [] { String.class, Object.class, Object.class }, format, arg1, arg2);
+ if (locationAware)
+ {
+ String msg = arrayFormat(format, new Object [] { arg1, arg2 });
+ invokeLocationAwareLoggerMethod(DEBUG_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("debug", new Class [] { String.class, Object.class, Object.class }, format, arg1, arg2);
+ }
}
public void debug(String format, Object[] argArray)
{
- invokeLoggerMethod("debug", new Class [] { String.class, Object [].class }, format, argArray);
+ if (locationAware)
+ {
+ String msg = arrayFormat(format, argArray);
+ invokeLocationAwareLoggerMethod(DEBUG_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("debug", new Class [] { String.class, Object [].class }, format, argArray);
+ }
}
public void debug(String msg, Throwable t)
{
- invokeLoggerMethod("debug", new Class [] { String.class, Throwable.class }, msg, t);
+ if (locationAware)
+ {
+ invokeLocationAwareLoggerMethod(DEBUG_INT, msg, t);
+ }
+ else
+ {
+ invokeLoggerMethod("debug", new Class [] { String.class, Throwable.class }, msg, t);
+ }
}
public void info(String msg)
{
- invokeLoggerMethod("info", new Class [] { String.class }, msg);
+ if (locationAware)
+ {
+ invokeLocationAwareLoggerMethod(INFO_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("info", new Class [] { String.class }, msg);
+ }
}
public void info(String format, Object arg)
{
- invokeLoggerMethod("info", new Class [] { String.class, Object.class }, format, arg);
+ if (locationAware)
+ {
+ String msg = arrayFormat(format, new Object [] { arg });
+ invokeLocationAwareLoggerMethod(INFO_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("info", new Class [] { String.class, Object.class }, format, arg);
+ }
}
public void info(String format, Object arg1, Object arg2)
{
- invokeLoggerMethod("info", new Class [] { String.class, Object.class, Object.class }, format, arg1, arg2);
+ if (locationAware)
+ {
+ String msg = arrayFormat(format, new Object [] { arg1, arg2 });
+ invokeLocationAwareLoggerMethod(INFO_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("info", new Class [] { String.class, Object.class, Object.class }, format, arg1, arg2);
+ }
}
public void info(String format, Object[] argArray)
{
- invokeLoggerMethod("info", new Class [] { String.class, Object [].class }, format, argArray);
+ if (locationAware)
+ {
+ String msg = arrayFormat(format, argArray);
+ invokeLocationAwareLoggerMethod(INFO_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("info", new Class [] { String.class, Object [].class }, format, argArray);
+ }
}
public void info(String msg, Throwable t)
{
- invokeLoggerMethod("info", new Class [] { String.class, Throwable.class }, msg, t);
+ if (locationAware)
+ {
+ invokeLocationAwareLoggerMethod(INFO_INT, msg, t);
+ }
+ else
+ {
+ invokeLoggerMethod("info", new Class [] { String.class, Throwable.class }, msg, t);
+ }
}
public void warn(String msg)
{
- invokeLoggerMethod("warn", new Class [] { String.class }, msg);
+ if (locationAware)
+ {
+ invokeLocationAwareLoggerMethod(WARN_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("warn", new Class [] { String.class }, msg);
+ }
}
public void warn(String format, Object arg)
{
- invokeLoggerMethod("warn", new Class [] { String.class, Object.class }, format, arg);
+ if (locationAware)
+ {
+ String msg = arrayFormat(format, new Object [] { arg });
+ invokeLocationAwareLoggerMethod(WARN_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("warn", new Class [] { String.class, Object.class }, format, arg);
+ }
}
public void warn(String format, Object arg1, Object arg2)
{
- invokeLoggerMethod("warn", new Class [] { String.class, Object.class, Object.class }, format, arg1, arg2);
+ if (locationAware)
+ {
+ String msg = arrayFormat(format, new Object [] { arg1, arg2 });
+ invokeLocationAwareLoggerMethod(WARN_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("warn", new Class [] { String.class, Object.class, Object.class }, format, arg1, arg2);
+ }
}
public void warn(String format, Object[] argArray)
{
- invokeLoggerMethod("warn", new Class [] { String.class, Object [].class }, format, argArray);
+ if (locationAware)
+ {
+ String msg = arrayFormat(format, argArray);
+ invokeLocationAwareLoggerMethod(WARN_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("warn", new Class [] { String.class, Object [].class }, format, argArray);
+ }
}
public void warn(String msg, Throwable t)
{
- invokeLoggerMethod("warn", new Class [] { String.class, Throwable.class }, msg, t);
+ if (locationAware)
+ {
+ invokeLocationAwareLoggerMethod(WARN_INT, msg, t);
+ }
+ else
+ {
+ invokeLoggerMethod("warn", new Class [] { String.class, Throwable.class }, msg, t);
+ }
}
public void error(String msg)
{
- invokeLoggerMethod("error", new Class [] { String.class }, msg);
+ if (locationAware)
+ {
+ invokeLocationAwareLoggerMethod(ERROR_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("error", new Class [] { String.class }, msg);
+ }
}
public void error(String format, Object arg)
{
- invokeLoggerMethod("error", new Class [] { String.class, Object.class }, format, arg);
+ if (locationAware)
+ {
+ String msg = arrayFormat(format, new Object [] { arg });
+ invokeLocationAwareLoggerMethod(ERROR_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("error", new Class [] { String.class, Object.class }, format, arg);
+ }
}
public void error(String format, Object arg1, Object arg2)
{
- invokeLoggerMethod("error", new Class [] { String.class, Object.class, Object.class }, format, arg1, arg2);
+ if (locationAware)
+ {
+ String msg = arrayFormat(format, new Object [] { arg1, arg2 });
+ invokeLocationAwareLoggerMethod(ERROR_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("error", new Class [] { String.class, Object.class, Object.class }, format, arg1, arg2);
+ }
}
public void error(String format, Object[] argArray)
{
- invokeLoggerMethod("error", new Class [] { String.class, Object [].class }, format, argArray);
+ if (locationAware)
+ {
+ String msg = arrayFormat(format, argArray);
+ invokeLocationAwareLoggerMethod(ERROR_INT, msg, null);
+ }
+ else
+ {
+ invokeLoggerMethod("error", new Class [] { String.class, Object [].class }, format, argArray);
+ }
}
public void error(String msg, Throwable t)
{
- invokeLoggerMethod("error", new Class [] { String.class, Throwable.class }, msg, t);
+ if (locationAware)
+ {
+ invokeLocationAwareLoggerMethod(ERROR_INT, msg, t);
+ }
+ else
+ {
+ invokeLoggerMethod("error", new Class [] { String.class, Throwable.class }, msg, t);
+ }
}
private Object invokeLoggerMethod(String methodName, Class<?> [] argTypes, Object ... args)
@@ -333,6 +526,34 @@ public class JetspeedLoggerUtil
}
}
+ private Object invokeLocationAwareLoggerMethod(int level, String msg, Throwable th)
+ {
+ try
+ {
+ return logcationAwareLoggerLogMethod.invoke(targetLogger, new Object [] { null, FQCN, level, msg, th });
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException("Failed to invoke location aware logger's log method on " + targetLogger + ". " + e);
+ }
+ }
+
+ private String arrayFormat(String format, Object [] objectArray)
+ {
+ try
+ {
+ if (arrayFormatMethod == null)
+ {
+ arrayFormatMethod = formatterClazz.getMethod("arrayFormat", String.class, Object [].class);
+ }
+
+ return (String) arrayFormatMethod.invoke(formatterClazz, format, objectArray);
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException("Failed to invoke arrayFormat method on " + formatterClazz + ". " + e);
+ }
+ }
};
private static class NOOPJetspeedLogger implements JetspeedLogger, Serializable
Modified: portals/jetspeed-2/portal/trunk/pom.xml
URL: http://svn.apache.org/viewvc/portals/jetspeed-2/portal/trunk/pom.xml?rev=1149443&r1=1149442&r2=1149443&view=diff
==============================================================================
--- portals/jetspeed-2/portal/trunk/pom.xml (original)
+++ portals/jetspeed-2/portal/trunk/pom.xml Fri Jul 22 03:18:18 2011
@@ -845,6 +845,11 @@
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
+ <artifactId>slf4j-ext</artifactId>
+ <version>${slf4j.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org