Log4J2 configuration in 3.0 servlet

13,841

Solution 1

As a reference this page describes how to configure Log4j2:

https://logging.apache.org/log4j/2.x/manual/webapp.html#ContextParams

In my case I have not configured any context-param in web.xml. The only thing I had to do was to set the display name:

<display-name>My Admin API</display-name>

I am also using log4j2.yaml instead of xml files and the file is not inside the war. Also notice that in this page https://logging.apache.org/log4j/2.x/manual/webapp.html they say there is a problem with versions of Tomcat < 7.0.43. So either you have to use a newer version of do a specific configuration.

Solution 2

Log4J will look for the log4j2.xml config file in the classpath, unless a location is specified. Have you tried not specifying the location of the log4j2.xml file (that is, remove the context-param stuff from web.xml), and simply relying on putting the config in the classpath? (app.war/WEB-INF/classes/log4j2.xml looks fine to me)

Note that the file must be named log4j2.xml and not log4j.xml.

Share:
13,841
Leos Literak
Author by

Leos Literak

Java enthusiast (since 1996), author of www.abclinuxu.cz website (aka stackexchange for czech/slovak linux users), solution architect, developer ..

Updated on July 07, 2022

Comments

  • Leos Literak
    Leos Literak almost 2 years

    I tried to set up LOG4J according documentation (and related SO questions), but it does not create supposed file, but there is such log in WildFly:

    No Log4j context configuration provided. This is very unusual
    

    web.xml

    <web-app xmlns="http://java.sun.com/xml/ns/javaee"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
           version="3.0">
    
    <context-param>
          <param-name>log4jConfigLocation</param-name>
         <param-value>/WEB-INF/classes/log4j2.xml</param-value>
    </context-param>
    

    app.war/WEB-INF/classes/log4j2.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <Configuration monitorInterval="30">
        <!-- http://logging.apache.org/log4j/2.x/manual/configuration.html -->
        <Properties>
            <Property name="filename">c:/oauth.log</Property>
        </Properties>
    
        <Filter type="ThresholdFilter" level="trace"/>
    
        <Appenders>
            <Appender type="File" name="File" fileName="${filename}">
                <Layout type="PatternLayout">
                    <Pattern>%d %p %C{1.} [%t] %m%n</Pattern>
                </Layout>
            </Appender>
            <File name="MyFile" fileName="c:/oauth2.log" immediateFlush="true">
                <PatternLayout pattern="%d{yyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            </File>
        </Appenders>
    
        <Loggers>
            <Logger name="cz.literak.demo" level="debug" additivity="true">
                <AppenderRef ref="File"/>
            </Logger>
            <Root level="error">
                <AppenderRef ref="MyFile"/>
            </Root>
        </Loggers>
    
    </Configuration>
    

    app.war/WEB-INF/lib

    commons-logging-1.1.3.jar
    json-smart-1.1.1.jar
    log4j-api-2.0-rc1.jar
    log4j-core-2.0-rc1.jar
    log4j-jcl-2.0-rc1.jar
    

    Could you tell me what is wrong? I tried to comment out context param in web.xml and rely on autoconfiguration but there is no change.

    EDIT

    when I added following code

    <context-param>
        <param-name>log4jContextName</param-name>
        <param-value>oauthDemo</param-value>
    </context-param>
    

    it failed differently (I do not have time to investigate now)

    07:41:29,269 INFO  [io.undertow.servlet] (MSC service thread 1-12) Log4jServletContainerInitializer starting up Log4j in Servlet 3.0+ environment.
    07:41:29,644 INFO  [stdout] (MSC service thread 1-12) 2014-02-20 07:41:29,643 ERROR FileManager (c:/oauth2.log) java.io.FileNotFoundException: c:\oauth2.log (Přístup byl odepřen)
    07:41:29,646 INFO  [stdout] (MSC service thread 1-12) 2014-02-20 07:41:29,645 ERROR Unable to invoke method createAppender in class org.apache.logging.log4j.core.appender.FileAppender for element File 07:41:29,647 INFO    [stdout] (MSC service thread 1-12)    at org.apache.logging.log4j.core.config.BaseConfiguration.createPluginObject(BaseConfiguration.java:913)
    
  • Leos Literak
    Leos Literak about 10 years
    Yes, I did. I removed all params from web.xml and it still did not work. I tried log4j2 Logger and this one worked, so I realized the issue is in commons library integration. I submitted defect: issues.apache.org/jira/browse/LOG4J2-546 with the smallest application where I can reproduce the issue.
  • jansohn
    jansohn almost 9 years
    For me it was also fixed by adding a display name.