[ 
https://issues.apache.org/jira/browse/WW-3988?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13610173#comment-13610173
 ] 

Lukasz Lenart commented on WW-3988:
-----------------------------------

You are right, let's do it in the right way. I have added support for user 
defined factory, so you can choose which one to use and don't depend on 
classpath discovery. Thus can also be used to define your own solution :-)

https://cwiki.apache.org/confluence/display/WW/Logging#Logging-Definingwhichfactorytouse
                
> Commons Logging may not work in XWork from issue WW-3959
> --------------------------------------------------------
>
>                 Key: WW-3988
>                 URL: https://issues.apache.org/jira/browse/WW-3988
>             Project: Struts 2
>          Issue Type: Bug
>          Components: Integration
>    Affects Versions: 2.3.12
>            Reporter: Erik Berg
>              Labels: logging, slf4j, xwork
>             Fix For: 2.3.13
>
>
> Support for SLF4J in XWork added in WW-3959 can break Commons Logging since 
> it looks for SLF4J in the classpath first. If found, it assumes Struts/XWork 
> is configured to use SLF4J and creates an SLF4J log factory.
> The problem with this approach is that other libraries in a web application 
> may have a dependency on SLF4J, hence it is found in the classpath, even when 
> it is not configured as the logging factory for Struts.
> {code:title=LoggerFactory.java|borderStyle=dashed}
> Index: LoggerFactory.java
> ===================================================================
> --- LoggerFactory.java        (revision 911280)
> +++ LoggerFactory.java        (revision 1431482)
> @@ -16,6 +16,7 @@
>  package com.opensymphony.xwork2.util.logging;
>  
>  import com.opensymphony.xwork2.util.logging.jdk.JdkLoggerFactory;
> +import com.opensymphony.xwork2.util.logging.slf4j.Slf4jLoggerFactory;
>  
>  import java.util.concurrent.locks.ReadWriteLock;
>  import java.util.concurrent.locks.ReentrantReadWriteLock;
> @@ -59,11 +60,17 @@
>          try {
>              if (factory == null) {
>                  try {
> -                    Class.forName("org.apache.commons.logging.LogFactory");
> -                    factory = new 
> com.opensymphony.xwork2.util.logging.commons.CommonsLoggerFactory();
> +                    Class.forName("org.slf4j.LoggerFactory");
> +                    factory = new Slf4jLoggerFactory();
>                  } catch (ClassNotFoundException ex) {
> -                    // commons logging not found, falling back to jdk logging
> -                    factory = new JdkLoggerFactory();
> +                    //slf4j not found try commons LogFactory
> +                    try {
> +                        
> Class.forName("org.apache.commons.logging.LogFactory");
> +                        factory = new 
> com.opensymphony.xwork2.util.logging.commons.CommonsLoggerFactory();
> +                    } catch (ClassNotFoundException cnfex) {
> +                        // commons logging not found, falling back to jdk 
> logging
> +                        factory = new JdkLoggerFactory();
> +                    }
>                  }
>              }
>              return factory;
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to