简体   繁体   中英

Log4j2: no log4j-web module available

I am trying to set the status level of my config to "info", but I am getting the following output:

INFO Log4j appears to be running in a Servlet environment, but there's no log4j-web module available. If you want better web container support, please add the log4j-web JAR to your web archive or server lib directory.

My log4j2.xml has the following

    <?xml version="1.0" encoding="UTF-8"?>
<Configuration status="info" packages="org.graylog2.log4j2">
    <Properties>
        <Property name="default_pattern">%d{MM/dd/yyyy hh:mm:ss} %5p %c{1} - %m%n</Property>
    </Properties>

    <!--  LOG4J2 APPENDERS -->
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="${default_pattern}"/>
        </Console>
        <Console name="com.sum.exam" target="SYSTEM_OUT">
            <PatternLayout pattern="${default_pattern}"/>                            
        </Console>
        <Console name="auth" target="SYSTEM_OUT">
            <PatternLayout pattern="${default_pattern}"/>                            
        </Console>
        <Console name="com.d.e" target="SYSTEM_OUT">
            <PatternLayout pattern="${default_pattern}"/>                            
        </Console>
        <Console name="com.google.gson" target="SYSTEM_OUT">
            <PatternLayout pattern="${default_pattern}"/>                            
        </Console>
        <Console name="org.elasticsearch" target="SYSTEM_OUT">
            <PatternLayout pattern="${default_pattern}"/>                            
        </Console>
        <Console name="com.datamotion.direct" target="SYSTEM_OUT">
            <PatternLayout pattern="${default_pattern}"/>                            
        </Console>
        <NullAppender name="null">
            <PatternLayout pattern="${default_pattern}"/> 
        </NullAppender>

        <!-- GELFJ CONFIGURATION -->
        <GELF   name="gelfAppender" 
                server="org.graylog2.log.GelfAppender" 
                port="12201"
                hostName="logs.x.d.com" 
                facility="GELF-JAVA"
                additionalFields="{'\u2018environment\u2019\': '\u2018EHR\u2019'}"
                extractStacktrace="true"
                addExtendedInformation="true">
            <PatternLayout pattern="${default_pattern}"/>
            <Root level="info">
                <AppenderRef ref="gelfAppender" level="info"/>
            </Root>
        </GELF>
    </Appenders>

    <!-- LOG4J2 CONFIGURATION -->
    <Loggers>
        <Root level="error" additivity="false" />

        <Logger name="console" level="info">
            <AppenderRef ref="console" />
        </Logger>
        <Logger name="com.sum.exam" level="debug" additivity="false">
            <AppenderRef ref="com.sum.exam" />
        </Logger>
        <Logger name="auth" level="debug" additivity="false">
            <AppenderRef ref="auth" />
        </Logger>
        <Logger name="com.d.e" level="debug" additivity="false">
            <AppenderRef ref="com.d.e" />
        </Logger>
        <Logger name="com.google.gson" level="info">
            <AppenderRef ref="com.google.gson" />
        </Logger>
        <Logger name="org.elasticsearch" level="info">
            <AppenderRef ref="org.elasticsearch" />
        </Logger>
        <Logger name="com.datamotion.direct" level="debug" additivity="false">
            <AppenderRef ref="com.datamotion.direct" />
        </Logger>
    </Loggers>

</Configuration>

I have downloaded the log4j-web-2.6.2.jar file and added it to my class path, but I still get the same output for some reason. What could I be doing wrong? I am able to output DEBUG status levels, but not INFO which is odd.

At first, I thought the problem was because I have servlet-api jar in my classpath, which I need, but removing that did not fix the problem, for me. In the end, all I had to do was just add the log4 web jar file from mvnrepository to your classpath and you're set!

The status="info" at the beginning of the configuration file is for internal log4j2 debug messages. If you set it to trace you will see details on how log4j2 is configured.

That has nothing to do with your application logging though. You say you are able to output debug messages, I assume that mean that the logging itself works as expected (If there's a problem there then please show your full configuration. )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM