Java Log4j2 未登录到控制台

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/23940346/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-14 09:15:15  来源:igfitidea点击:

Log4j2 not logging to console

javalogginglog4j2

提问by MeinAccount

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

我无法让Log4j 2登录到控制台。使用 gradle 运行时没有显示任何内容。

log4j2.xmlin the projects root directory:

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>

Usage in my classes:

在我的课程中的用法:

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

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

采纳答案by Alexandre Santos

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:

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

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.

使用 Log4j2 时的一个常见错误是将 log4j2.xml 放在不在类路径中的文件中。

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.

如果您看到任何输出,那是因为 log4j 无法加载您的文件。这是因为找不到文件时的默认日志级别是 ERROR,而不是 DEBUG。

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

log4j2.xml 在我的项目 (Maven) 中的位置在 src/main/resources 中,我知道它在我的类路径中。