为什么我的 log4j class 只记录 FATAL 消息?

Why is my log4j class only logging FATAL messages?

我有以下 log4j Java class:

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

public class HelloWorldLog4J {

    private static final Logger logger = LogManager.getLogger("HelloWorld");


    public static void main(String[] args) {

        System.out.println("pre_loggerDOTinfo");
        System.out.println();
        //logger.setLevel(Level.FATAL);   //used to be.. 

        logger.info("Hello, this is an INFO message");
        logger.warn("Hello, this is an WARN  message");
        logger.fatal("Hello, this is an FATAL  message");
        logger.fatal("Hello, this is an FATAL  message ALSO, #2");
        logger.fatal("Hello, this is an FATAL  message ALSO, #3");
        logger.fatal("Hello, this is an FATAL  message ALSO, #4");
        logger.debug("Hello, this is an FATAL  message");

        logger.info("Hello, this is an INFO message");
        logger.info("Hello, this is an INFO message");
        System.out.println();
        System.out.println("post_loggerDOTinfo");

    }

}

在同一目录中,我有一个 log4j 属性文件:

# Root logger option
log4j.rootLogger=WARN, Console


# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File= C:\Users\adel\Desktop\Misc_Stuff\Java_Code\logging.log
log4j.appender.file.MaxFileSize=1MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

如您所见,我注释掉了 logger.setLevel(Level.FATAL) 代码,因为它导致我的程序崩溃(说它找不到 setLevel,甚至当我尝试 toLevel 时它也不起作用)

我的输出是这样的:

pre_loggerDOTinfo

16:47:09.575 [main] FATAL HelloWorld - Hello, this is an FATAL message 16:47:09.575 [main] FATAL HelloWorld - Hello, this is an FATAL message ALSO, #2

16:47:09.575 [main] FATAL HelloWorld - Hello, this is an FATAL message ALSO, #3

16:47:09.575 [main] FATAL HelloWorld - Hello, this is an FATAL message ALSO, #4

post_loggerDOTinfo

我对 class 中使用的是哪个属性文件有点困惑。有没有办法追溯我使用的 log4j 版本,以及从哪里获取 log4j 属性信息?

感谢任何提示,谢谢!~

您的应用程序使用 log4j2 类(包是 org.apache.logging.log4j,而 log4j-1.x 在 org.apache.log4j 命名空间中)。

但是你的配置是一个针对log4j的properties文件-1.x.

Log4j2 不理解基于属性文件的配置。您必须提供 XML(或 Jason 或 YAML)配置文件。 Log4j2 将在类路径中查找名为 log4j2.xml 的配置文件。如果你把它放在别处,你需要使用 log4j.configurationFile 系统 属性.

告诉 log4j2 路径

log4j2manual has many examples configurations (the docs are much better than for log4j-1.x); I suggest starting with the example config shown for the RollingFile appender.

如果 Log4j2 找不到配置,它将使用默认配置,该配置仅在 ERROR 和 FATAL 级别记录到控制台。

最后,请注意,对于 log4j2,您 need 类路径中的 log4j-api 和 log4j-core jar 文件。

如果您使用的是 IntelliJ,请确保 log4j2.xml 位于 src/main/resource 文件夹中。如果项目只记录 FATAL 消息,这通常意味着您将 log4j2.xml 文件放在错误的位置(或者在项目的不同位置有 2 个同名文件等)并且框架 log4j 找不到它并且默认仅打印致命消息。

project (root)
|_src
  |_main
    |_java
    |_resource (add log4j2.xml here)
  |_test
    |_java
    |_resource

我正在使用 IntelliJ,最新的 log4j-core 并从以下位置获取配置文件示例: http://logging.apache.org/log4j/2.x/manual/appenders.html#RollingFileAppender