Log4j2无法记录到控制台。

9

我无法让Log4j 2在控制台上记录日志。使用gradle运行时没有显示任何内容。

在项目根目录下的log4j2.xml文件:

<?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>

我在课堂上的应用:

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

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

你应该指定要记录的类,LogFactory.getLogger(ABCHandler.class)。 - solvator
1
它将默认为当前类。有关更多详细信息,请参见Log4j 2 API - MeinAccount
2个回答

19

将您的文件和配置加载到我的计算机上是有效的。

这是我使用的类:

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");
    }
}

这是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>

最后,这是输出结果: true 2014-05-29 12:19:15,266 TRACE method: [main] Test (Test.java:10) - 进入 2014-05-29 12:19:15,268 INFO method: [main] Test (Test.java:11) - 信息!1001 2014-05-29 12:19:15,269 ERROR method: [main] Test (Test.java:12) - 错误!1001 2014-05-29 12:19:15,269 DEBUG method: [main] Test (Test.java:13) - 调试!1001 使用Log4j2时常见的一个错误是将log4j2.xml放在不在类路径中的文件中。
为了诊断是否存在该问题,请更改行。
logger.info("Opening serial port {}", serialPortName);

为了

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

如果你看到任何输出,那是因为log4j无法加载你的文件。这是因为当文件未找到时,默认日志级别是ERROR,而不是DEBUG。
我的项目(Maven)中log4j2.xml的位置在src/main/resources中,我知道它在我的类路径中。

5
在使用Log4j2时常见的错误是将log4j2.xml文件放置在不在类路径中的文件中。 - MeinAccount
总是忘记那个。 - Endrik
3
我遇到了同样的问题,log.info 没有输出,但是 log.error 可以输出。我将我的项目添加到 classpath 中,并且我的 log4j2.xml 文件位于 classpath 目录下。这里有什么我忽略的吗? - Vrushank Doshi
呵呵,它就坐在基础项目目录中。写得很好,示例也很棒! - user4538583

1
我的问题是:
  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
    }
    

注意:当我按照这里的说明添加sourcesets时,仍然无法找到log4j.properties文件,只有将其重命名才起作用!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接