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

Nick Williams commented on LOG4J2-270:
--------------------------------------

Remko, a valid question. I did not want to use the name {{log4j2.xml}} _so as 
to highlight the fact that you could name the file whatever you want_ using 
this context parameter. However, I can see how {{log4j.xml}} can be confusing. 
I'm wrapping up another commit regarding this issue, so I'll change the name to 
something more obviously different.
                
> Improve logging initialization in Servlet containers; reduce amount of extra 
> configuration needed in these contexts
> -------------------------------------------------------------------------------------------------------------------
>
>                 Key: LOG4J2-270
>                 URL: https://issues.apache.org/jira/browse/LOG4J2-270
>             Project: Log4j 2
>          Issue Type: Improvement
>          Components: Core
>    Affects Versions: 2.0-beta6, 2.0-beta7
>            Reporter: Nick Williams
>            Assignee: Nick Williams
>              Labels: config, configuration, web
>   Original Estimate: 72h
>  Remaining Estimate: 72h
>
> [Note: This has been pulled from discussions surrounding LOG4J2-223. 
> Specifically, the description below comes from [this 
> comment|https://issues.apache.org/jira/browse/LOG4J2-223?focusedCommentId=13668682&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-13668682].]
> Okay, based on all of this, here are my suggestions on how I would improve 
> this (sorry for my scarcity lately ... trying to catch up on chapters for the 
> book). These suggestions are based on the following goals:
> # Design web application support so that users of simple Log4j configurations 
> (not using JNDI lookups for logging configuration) don't have to do any 
> additional configuration to get Log4j to "just work" in a Servlet container. 
> This goal is made with the understanding that this is only possible for users 
> of Servlet 3.0, 3.1, or higher. Users of Servlet 2.5 will have to manually 
> configure listeners and filters. It's the only way.
> # Eliminate the need for web applications to have an additional JAR just to 
> support proper configuration.
> # Improve the documentation considerably so that it is abundantly clear how 
> Log4j works in web applications.
> With these goals in mind, here are my recommendations:
> * Get rid of the log4j-web module and move this stuff into log4j-core. We'll 
> need [~timothyjward]'s input on how this could impact OSGi support. In 
> theory, I don't think we should have a problem. No other Log4j classes will 
> refer to the listener or filter. These classes will only ever get loaded BY 
> the Servlet container, in which case the Servlet API will already be loaded, 
> so I don't think it would be possible to get {{NoClassDefFoundError}} s.
> * Create a {{/META-INF/web-fragment.xml}} file with the contents noted below. 
> This will ensure that the Log4j fragment is loaded before any other fragments.
> * Create a {{Log4jWebInitializer}} class (doesn't implement any interfaces, 
> package-private) to properly initialize and de-initialize Log4j in a Servlet 
> container. It works like this: If the context parameters currently required 
> by the {{JNDIContextFilter}} exist, it initializes Log4j the way 
> {{JNDIContextFilter}} currently does. If they don't exist, it initializes 
> Log4j the way {{Log4jContextListener}} currently does.
> * Create a {{Log4jServletContainerInitializer implements 
> ServletContainerInitializer}} and a 
> {{/META-INF/services/javax.servlet.ServletContainerInitializer}} file to go 
> along with it. This initializer:
> ** Initializes Log4j properly using the {{Log4jWebInitializer}}.
> ** Installs a private listener to de-initialize Log4j when the container 
> shuts down the application using the {{Log4jWebInitializer}}.
> ** Installs the {{NamedContextFilter}} (renamed from {{JNDIContextFilter}}), 
> which doesn't do any initialization/deinitialization, it just does what it 
> currently does for {{doFilter}}.
> * Change the existing {{Log4jContextListener}} to use the 
> {{Log4jWebInitializer}}.
> * Create a new manual page directly under the "MANUAL" menu heading on the 
> homepage that explains how to use Log4j in a Servlet container:
> ** If you're using Servlet 3.0 or higher, it "just works," but if you're also 
> using JNDI you need to create the proper context parameters.
> ** If you're using Servlet 2.5, you MUST add the {{Log4jContextListener}} 
> (and the {{NamedContextFilter}} and context parameters if you're using JNDI) 
> to your deployment descriptor.
> Now, to address some questions:
> # "What to do about JBoss 5, which doesn't support web-fragment.xml?" JBoss 5 
> doesn't support web-fragment.xml because it's a Servlet 2.5 container, not a 
> Servlet 3.0 container. Users of JBoss 5 would follow the Servlet 2.5 
> instructions just like all other users. Users of JBoss 6, 7, 8, etc., would 
> follow the Servlet 3.0 instructions ("don't do anything").
> # "A container with multiple web applications. The Log4j jars are in the 
> Tomcat classpath and they all share the same configuration file." versus "A 
> container with multiple web applications. Each has their own copy of the 
> log4j jars and each has their own configuration file." Easy! The 
> {{Log4jServletContainerInitializer}} will get executed for every application, 
> whether the Log4j JARs are in the Tomcat classpath or in /WEB-INF/lib (this 
> is per the Servlet specification). Each application will get its own context. 
> Regardless of where the JARs are, that context will load the application's 
> configuration file if it has its own, and will load the shared configuration 
> if it doesn't have its own.
> Thoughts?
> {code:xml|title=web-fragment.xml}<web-fragment ... metadata-complete="true">
>     <name>log4j</name>
>     <distributable/>
>     <ordering>
>         <before>
>             <others/>
>         </before>
>     </ordering>
> </web-fragment>{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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to