[
https://issues.apache.org/jira/browse/LOG4J2-293?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13754049#comment-13754049
]
Abhinav Shah commented on LOG4J2-293:
-------------------------------------
h3. I found a work around to this problem.
h2. You would need spring-core-3.2.0 jar for this solution to work.
{code}
import java.io.FileNotFoundException;
import java.net.URL;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.apache.logging.log4j.core.web.Log4jServletContextListener;
import org.springframework.util.ResourceUtils;
import org.springframework.util.SystemPropertyUtils;
import org.springframework.web.util.WebUtils;
public class MyLog4jServletContextListener implements ServletContextListener {
private ServletContext servletContext;
private Log4jServletContextListener log4jServletContextListener;
@Override
public void contextInitialized(ServletContextEvent sce) {
this.servletContext = sce.getServletContext();
String location =
servletContext.getInitParameter("log4jConfig");
// Perform actual log4j initialization; else rely on log4j's
default
// initialization.
try {
// Resolve system property placeholders before
potentially
// resolving a real path.
location =
SystemPropertyUtils.resolvePlaceholders(location);
// Leave a URL (e.g. "classpath:" or "file:") as-is.
if (!ResourceUtils.isUrl(location)) {
// Consider a plain file path as relative to
the web
// application root directory.
location = WebUtils.getRealPath(servletContext,
location);
}
URL url = ResourceUtils.getURL(location);
if (url == null) {
throw new FileNotFoundException(location
+ " cannot be resolved to
absolute file path "
+ "because it does not reside
in the file system");
}
sce.getServletContext().setInitParameter("log4jConfiguration",
url.toString());
} catch (FileNotFoundException ex) {
throw new IllegalArgumentException(
"Invalid 'log4jConfigLocation'
parameter: "
+ ex.getMessage());
}
log4jServletContextListener = new Log4jServletContextListener();
log4jServletContextListener.contextInitialized(sce);
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
log4jServletContextListener.contextDestroyed(sce);
}
{code}
h4. web.xml
{code:xml}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0" metadata-complete="true">
<absolute-ordering />
<display-name>pec-service</display-name>
<context-param>
<param-name>log4jConfig</param-name>
<param-value>classpath:log4j/${com.labcorp.app.env}.log4j.xml</param-value>
</context-param>
<listener>
<listener-class>com.eag.util.web.MyLog4jServletContextListener</listener-class>
</listener>
<filter>
<filter-name>log4jServletFilter</filter-name>
<filter-class>org.apache.logging.log4j.core.web.Log4jServletFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>log4jServletFilter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
</web-app>
{code}
> classloader URI scheme broken or insufficient when using Log4jContextListener
> -----------------------------------------------------------------------------
>
> Key: LOG4J2-293
> URL: https://issues.apache.org/jira/browse/LOG4J2-293
> Project: Log4j 2
> Issue Type: Bug
> Components: Configurators
> Affects Versions: 2.0-beta7
> Reporter: Neale Upstone
> Assignee: Nick Williams
> Labels: documentation
>
> I'm trying to migrate to Log4j2, and things looked promising when I spotted
> Log4jContextListener.
> However, there are too many holes.
> Firstly, I tried using classpath: as a scheme, and nothing blew up, so I
> assumed I'd got it right.
> Then I *looked at the code* (which shouldn't be how we find out) and
> eventually discovered some code relating to a 'classloader' scheme.
> Still silent failure. It seems that the classpath is not being searched,
> perhaps just the WAR classloader, not the JARs in WEB-INF/lib.
> Next I tried omitting the / (i.e. using classloader:log4j2.xml) and got a
> NullPointerException.
> Can you please document what schemes are supported and what you expect them
> to do, and *not fail silently* when a configuration file is specified, but
> nothing happens.
--
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
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]