[jboss-svn-commits] JBoss Common SVN: r3735 - in common-logging-log4j/branches/2.1: src/main/java/org/jboss/logging/filter and 1 other directory.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon Nov 16 07:40:41 EST 2009
Author: jaikiran
Date: 2009-11-16 07:40:41 -0500 (Mon, 16 Nov 2009)
New Revision: 3735
Added:
common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/AbstractTCLFilter.java
common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java
common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLMCFilter.java
Removed:
common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java
Modified:
common-logging-log4j/branches/2.1/pom.xml
Log:
JBLOGGING-30 Use the new TCLMCFilter for logging per application support
Modified: common-logging-log4j/branches/2.1/pom.xml
===================================================================
--- common-logging-log4j/branches/2.1/pom.xml 2009-11-16 11:55:21 UTC (rev 3734)
+++ common-logging-log4j/branches/2.1/pom.xml 2009-11-16 12:40:41 UTC (rev 3735)
@@ -44,6 +44,18 @@
</dependency>
<dependency>
+ <groupId>org.jboss.cl</groupId>
+ <artifactId>jboss-classloading</artifactId>
+ <version>2.0.7.GA</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.jboss.man</groupId>
+ <artifactId>jboss-managed</artifactId>
+ <version>2.1.1.CR1</version>
+ </dependency>
+
+ <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
Copied: common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/AbstractTCLFilter.java (from rev 3695, common-logging-log4j/trunk/src/main/java/org/jboss/logging/filter/AbstractTCLFilter.java)
===================================================================
--- common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/AbstractTCLFilter.java (rev 0)
+++ common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/AbstractTCLFilter.java 2009-11-16 12:40:41 UTC (rev 3735)
@@ -0,0 +1,138 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.logging.filter;
+
+import org.apache.log4j.spi.Filter;
+import org.apache.log4j.spi.LoggingEvent;
+import org.jboss.util.collection.WeakSet;
+
+/** An appender filter that accepts log events based on whether the thread
+
+ context class loader has a classpath URL that has the DeployURL
+
+ attribute as a substring. A sample usage would be:
+
+
+ <appender name="JMX-CONSOLE" class="org.jboss.logging.appender.FileAppender">
+ <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
+ <param name="File" value="${jboss.server.home.dir}/log/jmx-console.log"/>
+ <layout class="org.apache.log4j.PatternLayout">
+ <!-- The default pattern: Date Priority [Category] Message\n -->
+ <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
+ </layout>
+
+ <filter class="org.jboss.logging.filter.TCLFilter">
+
+ <param name="AcceptOnMatch" value="true"/>
+
+ <param name="DeployURL" value="jmx-console.war"/>
+
+ </filter>
+ </appender>
+
+
+ @author Scott.Stark at jboss.org
+ @author Ales.Justin at jboss.org
+ */
+public abstract class AbstractTCLFilter extends Filter
+{
+ /** The set of TCLs seen to match DeployURL */
+ private WeakSet matchSet = new WeakSet();
+ /** The set of TCLs seen to not match DeployURL */
+ private WeakSet missSet = new WeakSet();
+ /** The deployment URL string fragment to match against */
+ private String deployURL;
+ /** Whether a match should return ACCEPT or DENY */
+ private boolean acceptOnMatch = true;
+
+ public boolean isAcceptOnMatch()
+ {
+ return acceptOnMatch;
+ }
+
+ public void setAcceptOnMatch(boolean acceptOnMatch)
+ {
+ this.acceptOnMatch = acceptOnMatch;
+ }
+
+ public String getDeployURL()
+ {
+ return deployURL;
+ }
+
+ public void setDeployURL(String deployURL)
+ {
+ this.deployURL = deployURL;
+ }
+
+ public int decide(LoggingEvent event)
+ {
+ int ok = Filter.NEUTRAL;
+ if( acceptOnMatch == true )
+ {
+ if( isMatchingTCL() )
+ ok = Filter.ACCEPT;
+ }
+ else
+ {
+ if( isMatchingTCL() )
+ ok = Filter.DENY;
+ }
+ return ok;
+ }
+
+ /** Start with the current thread context class loader
+ * @return true if the caller tcl has a url matching our deployURL
+ */
+ private boolean isMatchingTCL()
+ {
+ ClassLoader tcl = Thread.currentThread().getContextClassLoader();
+ if( matchSet.contains(tcl) )
+ return true;
+ if( missSet.contains(tcl) )
+ return false;
+
+ // Search the class loader URLs for a match
+ ClassLoader cl = tcl;
+ while( cl != null )
+ {
+ if (matchClassLoader(cl))
+ break;
+ cl = cl.getParent();
+ }
+
+ if(cl != null)
+ matchSet.add(tcl);
+ else
+ missSet.add(tcl);
+
+ return (cl != null);
+ }
+
+ /**
+ * Match classloader against deployURL fragment.
+ *
+ * @param cl the classloader
+ * @return true if the classloader matches fragment, false otherwise.
+ */
+ protected abstract boolean matchClassLoader(ClassLoader cl);
+}
\ No newline at end of file
Deleted: common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java
===================================================================
--- common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java 2009-11-16 11:55:21 UTC (rev 3734)
+++ common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java 2009-11-16 12:40:41 UTC (rev 3735)
@@ -1,188 +0,0 @@
-/*
-* JBoss, Home of Professional Open Source
-* Copyright 2005, JBoss Inc., and individual contributors as indicated
-* by the @authors tag. See the copyright.txt in the distribution for a
-* full listing of individual contributors.
-*
-* This is free software; you can redistribute it and/or modify it
-* under the terms of the GNU Lesser General Public License as
-* published by the Free Software Foundation; either version 2.1 of
-* the License, or (at your option) any later version.
-*
-* This software is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-* Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public
-* License along with this software; if not, write to the Free
-* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
-* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
-*/
-package org.jboss.logging.filter;
-
-import java.lang.reflect.Method;
-import java.net.URL;
-import java.net.URLClassLoader;
-
-import org.apache.log4j.spi.Filter;
-import org.apache.log4j.spi.LoggingEvent;
-import org.jboss.util.collection.WeakSet;
-
-/** An appender filter that accepts log events based on whether the thread
-
- context class loader has a classpath URL that has the DeployURL
-
- attribute as a substring. A sample usage would be:
-
-
- <appender name="JMX-CONSOLE" class="org.jboss.logging.appender.FileAppender">
- <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
- <param name="File" value="${jboss.server.home.dir}/log/jmx-console.log"/>
- <layout class="org.apache.log4j.PatternLayout">
- <!-- The default pattern: Date Priority [Category] Message\n -->
- <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
- </layout>
-
- <filter class="org.jboss.logging.filter.TCLFilter">
-
- <param name="AcceptOnMatch" value="true"/>
-
- <param name="DeployURL" value="jmx-console.war"/>
-
- </filter>
- </appender>
-
-
- @author Scott.Stark at jboss.org
- @version $Revision$
- */
-public class TCLFilter extends Filter
-{
- /** The set of TCLs seen to match DeployURL */
- private WeakSet matchSet = new WeakSet();
- /** The set of TCLs seen to not match DeployURL */
- private WeakSet missSet = new WeakSet();
- /** The deployment URL string fragment to match against */
- private String deployURL;
- /** Whether a match should return ACCEPT or DENY */
- private boolean acceptOnMatch = true;
-
- public boolean isAcceptOnMatch()
- {
- return acceptOnMatch;
- }
-
- public void setAcceptOnMatch(boolean acceptOnMatch)
- {
- this.acceptOnMatch = acceptOnMatch;
- }
-
- public String getDeployURL()
- {
- return deployURL;
- }
-
- public void setDeployURL(String deployURL)
- {
- this.deployURL = deployURL;
- }
-
- public int decide(LoggingEvent event)
- {
- int ok = Filter.NEUTRAL;
- if( acceptOnMatch == true )
- {
- if( isMatchingTCL() )
- ok = Filter.ACCEPT;
- }
- else
- {
- if( isMatchingTCL() )
- ok = Filter.DENY;
- }
- return ok;
- }
-
- /** Start with the current thread context class loader
- * @return true if the caller tcl has a url matching our deployURL
- */
- private boolean isMatchingTCL()
- {
- ClassLoader tcl = Thread.currentThread().getContextClassLoader();
- if( matchSet.contains(tcl) )
- return true;
- if( missSet.contains(tcl) )
- return false;
-
- // Search the class loader URLs for a match
- ClassLoader cl = tcl;
- boolean match = false;
- while( cl != null )
- {
- URL[] urls = getClassLoaderURLs(cl);
- for(int n = 0; n < urls.length; n ++)
- {
- URL u = urls[n];
- String file = u.getFile();
- if( file.indexOf(deployURL) > 0 )
- {
- match = true;
- break;
- }
- }
- cl = cl.getParent();
- }
-
- if( match == true )
- matchSet.add(tcl);
- else
- missSet.add(tcl);
-
- return match;
- }
-
- /**
- * First check if the <code>cl</code> is of type URLClassloader. If yes, then use the getURLs API without the
- * need for reflection. If its not a URLClassloader type then go for reflection
- * to access a URL[] getURLs method so that non-URLClassLoader
- * class loaders that support this method can provide info.
- */
- private static URL[] getClassLoaderURLs(ClassLoader cl)
- {
- URL[] urls = {};
- try
- {
- if (cl instanceof URLClassLoader)
- {
- URLClassLoader urlClassloader = (URLClassLoader) cl;
- urls = urlClassloader.getURLs();
- }
- else
- {
- Class<?> returnType = urls.getClass();
- Class<?>[] parameterTypes = {};
- Method getURLs = cl.getClass().getMethod("getURLs", parameterTypes);
- if( returnType.isAssignableFrom(getURLs.getReturnType()) )
- {
- Object[] args = {};
- urls = (URL[]) getURLs.invoke(cl, args);
- }
- if( urls == null || urls.length == 0 )
- {
- getURLs = cl.getClass().getMethod("getClasspath", parameterTypes);
- if( returnType.isAssignableFrom(getURLs.getReturnType()) )
- {
- Object[] args = {};
- urls = (URL[]) getURLs.invoke(cl, args);
- }
- }
- }
- }
- catch(Exception ignore)
- {
- }
- return urls;
- }
-
-}
Copied: common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java (from rev 3695, common-logging-log4j/trunk/src/main/java/org/jboss/logging/filter/TCLFilter.java)
===================================================================
--- common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java (rev 0)
+++ common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLFilter.java 2009-11-16 12:40:41 UTC (rev 3735)
@@ -0,0 +1,115 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.logging.filter;
+
+import java.lang.reflect.Method;
+import java.net.URL;
+import java.net.URLClassLoader;
+
+/**
+ * An appender filter that accepts log events based on whether the thread
+ * <p/>
+ * context class loader has a classpath URL that has the DeployURL
+ * <p/>
+ * attribute as a substring. A sample usage would be:
+ * <p/>
+ * <p/>
+ * <appender name="JMX-CONSOLE" class="org.jboss.logging.appender.FileAppender">
+ * <errorHandler class="org.jboss.logging.util.OnlyOnceErrorHandler"/>
+ * <param name="File" value="${jboss.server.home.dir}/log/jmx-console.log"/>
+ * <layout class="org.apache.log4j.PatternLayout">
+ * <!-- The default pattern: Date Priority [Category] Message\n -->
+ * <param name="ConversionPattern" value="%d %-5p [%c] %m%n"/>
+ * </layout>
+ * <p/>
+ * <filter class="org.jboss.logging.filter.WebTCLFilter">
+ * <p/>
+ * <param name="AcceptOnMatch" value="true"/>
+ * <p/>
+ * <param name="DeployURL" value="jmx-console.war"/>
+ * <p/>
+ * </filter>
+ * </appender>
+ *
+ * @author Scott.Stark at jboss.org
+ * @version $Revision: 3621 $
+ */
+public class TCLFilter extends AbstractTCLFilter
+{
+ protected boolean matchClassLoader(ClassLoader cl)
+ {
+ URL[] urls = getClassLoaderURLs(cl);
+ for (URL u : urls)
+ {
+ String file = u.getFile();
+ if (file.indexOf(getDeployURL()) > 0)
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * First check if the <code>cl</code> is of type URLClassloader. If yes, then use the getURLs API without the
+ * need for reflection. If its not a URLClassloader type then go for reflection
+ * to access a URL[] getURLs method so that non-URLClassLoader
+ * class loaders that support this method can provide info.
+ *
+ * @param cl classloader
+ * @return classloader's urls
+ */
+ private static URL[] getClassLoaderURLs(ClassLoader cl)
+ {
+ URL[] urls = {};
+ try
+ {
+ if (cl instanceof URLClassLoader)
+ {
+ URLClassLoader urlClassloader = (URLClassLoader)cl;
+ urls = urlClassloader.getURLs();
+ }
+ else
+ {
+ Class<?> returnType = urls.getClass();
+ Class<?>[] parameterTypes = {};
+ Method getURLs = cl.getClass().getMethod("getURLs", parameterTypes);
+ if (returnType.isAssignableFrom(getURLs.getReturnType()))
+ {
+ Object[] args = {};
+ urls = (URL[])getURLs.invoke(cl, args);
+ }
+ if (urls == null || urls.length == 0)
+ {
+ getURLs = cl.getClass().getMethod("getClasspath", parameterTypes);
+ if (returnType.isAssignableFrom(getURLs.getReturnType()))
+ {
+ Object[] args = {};
+ urls = (URL[])getURLs.invoke(cl, args);
+ }
+ }
+ }
+ }
+ catch (Exception ignore)
+ {
+ }
+ return urls;
+ }
+}
\ No newline at end of file
Copied: common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLMCFilter.java (from rev 3695, common-logging-log4j/trunk/src/main/java/org/jboss/logging/filter/TCLMCFilter.java)
===================================================================
--- common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLMCFilter.java (rev 0)
+++ common-logging-log4j/branches/2.1/src/main/java/org/jboss/logging/filter/TCLMCFilter.java 2009-11-16 12:40:41 UTC (rev 3735)
@@ -0,0 +1,84 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.logging.filter;
+
+import org.jboss.classloading.spi.dependency.ClassLoading;
+import org.jboss.classloading.spi.dependency.Module;
+import org.jboss.classloading.spi.visitor.ResourceContext;
+import org.jboss.classloading.spi.visitor.ResourceFilter;
+import org.jboss.classloading.spi.visitor.ResourceVisitor;
+
+/**
+ * MC/AS5 based TCL filter.
+ *
+ * @author ales.justin at jboss.org
+ */
+public class TCLMCFilter extends AbstractTCLFilter
+{
+ protected boolean matchClassLoader(ClassLoader cl)
+ {
+ Module module = ClassLoading.getModuleForClassLoader(cl);
+ if (module == null)
+ return false;
+
+ MatchFragment mf = new MatchFragment();
+ module.visit(mf, null, mf);
+ return mf.isFound();
+ }
+
+ private class MatchFragment implements ResourceVisitor, ResourceFilter
+ {
+ private boolean found;
+ private boolean visited;
+
+ public ResourceFilter getFilter()
+ {
+ return null;
+ }
+
+ public boolean accepts(ResourceContext rc)
+ {
+ if (visited)
+ {
+ visited = false; // reset recursion filter
+ return false;
+ }
+ return true;
+ }
+
+ public void visit(ResourceContext rc)
+ {
+ visited = true;
+
+ if (found)
+ return;
+
+ String rcString = rc.getUrl().toExternalForm();
+ found = rcString.contains(getDeployURL());
+ }
+
+ public boolean isFound()
+ {
+ return found;
+ }
+ }
+}
More information about the jboss-svn-commits
mailing list