MeinAccount
MeinAccount

Reputation: 543

Log4j2 not logging to console

I cannot get Log4j 2 to log to the console. Nothing is showing up when running with gradle.

log4j2.xml in the projects root directory:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="ALL">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
    </Appenders>
    <Loggers>
        <Root level="all">
            <AppenderRef ref="Console"/>
        </Root>
    </Loggers>
</Configuration>

Usage in my classes:

public class ABCHandler {
    private final Logger logger = LogManager.getLogger();

    public ABC(String serialPortName) {
        logger.info("Opening serial port {}", serialPortName);
    }
}

Upvotes: 10

Views: 39212

Answers (2)

rupweb
rupweb

Reputation: 3328

My problems were:

  1. I was using a log4j.properties file. Once renamed to log4j2.properties the main and test classpaths picked it up

  2. I had to add logging to standard output to build.gradle

    test {
       testLogging.showStandardStreams = true
    }
    

note: when I added sourcesets according to here it still didn't find the log4j.properties file only renaming it worked!

Upvotes: 1

Alexandre Santos
Alexandre Santos

Reputation: 8338

Loading your file and configurations on my machine works.

This was the class I used:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class Test
{
    private final Logger logger = LogManager.getLogger(Test.class);

    public Test(String serialPortName) {
        System.out.println(logger.isInfoEnabled());
        logger.entry();
        logger.info("info! {}", serialPortName);
        logger.error("error! {}", serialPortName);
        logger.debug("debug! {}", serialPortName);
    }

    public static void main(String args[])
    {
        Test h1 = new Test("1001");
    }
}

This is the log4j2.xml:

   <ThresholdFilter level="all"/>

 <Appenders>
   <Console name="STDOUT" target="SYSTEM_OUT">
     <PatternLayout pattern="%d %-5p method: [%t] %C{2} (%F:%L) - %m%n"/>
   </Console>
 </Appenders>
 <Loggers>
   <Root level="all">
     <AppenderRef ref="STDOUT"/>
   </Root>
 </Loggers>

and finally, this is the output:

true 2014-05-29 12:19:15,266 TRACE method: [main] Test (Test.java:10) - entry 2014-05-29 12:19:15,268 INFO method: [main] Test (Test.java:11) - info! 1001 2014-05-29 12:19:15,269 ERROR method: [main] Test (Test.java:12) - error! 1001 2014-05-29 12:19:15,269 DEBUG method: [main] Test (Test.java:13) - debug! 1001

One common error when using Log4j2 is placing the log4j2.xml in a file that is not in the classpath.

To diagnose if that is the problem, change the line

logger.info("Opening serial port {}", serialPortName);

to

logger.error("Opening serial port {}", serialPortName);

If you see any output it is because log4j can't load your file. This is because the default log level when the file is not found is ERROR, not DEBUG.

The location of the log4j2.xml on my project (Maven) is in src/main/resources, which I know it is in my classpath.

Upvotes: 19

Related Questions