[jboss-user] [JBoss Messaging] - Re: Separate log files no longer works with JBM 3.2
chip_schoch
do-not-reply at jboss.com
Wed Apr 18 13:11:42 EDT 2007
Judging by the tremendous number of replies I see that this is a topic of enormous interest. However, if anyone is interested I was able to effect a work around by adding another filter. Here it is in case anyone is interested. It should be placed in the chain before the TCLFilter:
package your.package;
|
|
|
| import java.security.CodeSource;
| import java.security.ProtectionDomain;
|
| import org.apache.log4j.spi.Filter;
| import org.apache.log4j.spi.LoggingEvent;
|
| /**
| * Class CSFilter<br>
| * An appender filter that evaluates log events to see if the class
| * that is specified by the loggerName has a code source that contains
| * the string specified in deployURL.<br><br>
| *
| * It is important that the logger be initialized with a class:<br>
| * Logger logger = Logger.getInstance(MyClass.class);<br><br>
| *
| * This way the loggerName will be a fully qualified class name. This filter
| * uses the thread context classloader to load the class and then obtains the
| * CodeSource via the ProtectionDomain. It checks the path of the code source
| * to see if the url specified in deployURL is contained in it. Therefore it is
| * case sensitive. This class should be used in conjunction with the TCLFilter and should
| * preced it in the chain because if a match is not found this filter returns NEUTRAL.<br><br>
| *
| * The acceptOnMatch parameter is only applied when a match is found. If it is true then a match
| * returns ACCEPT otherwise when it is false a match returns DENY.
| */
|
| public class CSFilter extends Filter
| {
|
| /** The deployment URL string fragment to match against */
|
| private String deployURL;
|
| /** Whether a match should return ACCEPT or DENY */
|
| private boolean acceptOnMatch = true;
|
| /**
| * Method: decide
| *
| *
| * @param event
| *
| * @return
| */
|
| @Override public int decide (LoggingEvent event)
| {
| int result = Filter.NEUTRAL;
|
| if (isMatchingCS (event))
| result = acceptOnMatch ? Filter.ACCEPT : Filter.DENY;
|
| return result;
| }
|
| /**
| * Method: getDeployURL
| *
| *
| * @return
| */
|
| public String getDeployURL ()
| {
| return deployURL;
| }
|
| /**
| * Method: isAcceptOnMatch
| *
| *
| * @return
| */
|
| public boolean isAcceptOnMatch ()
| {
| return acceptOnMatch;
| }
|
| /**
| * Method: isMatchingCS
| *
| *
| * @param event
| *
| * @return
| */
|
| private boolean isMatchingCS (LoggingEvent event)
| {
| boolean match = false;
| try
| {
| ClassLoader cl = Thread.currentThread ().getContextClassLoader ();
| Class clazz = cl.loadClass (event.getLoggerName ());
|
| ProtectionDomain pd = clazz.getProtectionDomain ();
| CodeSource clazzCS = pd.getCodeSource ();
|
| if (clazzCS != null)
| {
| String path = clazzCS.getLocation ().getPath ();
| match = path.contains (deployURL);
| }
| }
| catch (Exception e)
| {
| // Not much to do in this event
| }
|
| return match;
| }
|
| /**
| * Method: setAcceptOnMatch
| *
| *
| * @param acceptOnMatch
| */
|
| public void setAcceptOnMatch (boolean acceptOnMatch)
| {
| this.acceptOnMatch = acceptOnMatch;
| }
|
| /**
| * Method: setDeployURL
| *
| *
| * @param deployURL
| */
|
| public void setDeployURL (String deployURL)
| {
| this.deployURL = deployURL;
| }
| }
|
Example from log4j.xml
<filter class="your.package.CSFilter">
| <param name="AcceptOnMatch" value="true"/>
| <param name="DeployURL" value="YourService.sar"/>
| </filter>
| <filter class="org.jboss.logging.filter.TCLFilter">
| <param name="AcceptOnMatch" value="true"/>
| <param name="DeployURL" value="YourService.sar"/>
| </filter>
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4038543#4038543
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4038543
More information about the jboss-user
mailing list