You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@struts.apache.org by "Lukasz Lenart (JIRA)" <ji...@apache.org> on 2013/02/21 08:58:13 UTC

[jira] [Updated] (WW-3988) Commons Logging may not work in XWork from issue WW-3959

     [ https://issues.apache.org/jira/browse/WW-3988?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Lukasz Lenart updated WW-3988:
------------------------------

    Fix Version/s: 2.3.12
    
> 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.11
>            Reporter: Erik Berg
>              Labels: logging, slf4j, xwork
>             Fix For: 2.3.12
>
>
> 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