Java 为什么我的log4j类只记录致命消息?

Java 为什么我的log4j类只记录致命消息?,java,logging,configuration,log4j,log4j2,Java,Logging,Configuration,Log4j,Log4j2,我有以下log4j Java类: 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");

我有以下log4j Java类:

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,甚至当我尝试升级时它也不起作用)

我的输出是:

pre_loggerDOTinfo

16:47:09.575[主要]致命的地狱世界-你好,这是致命的 消息16:47:09.575[主要]致命的HelloWorld-你好,这是致命的 消息还包括#2

16:47:09.575[主要]致命的地狱世界-你好,这是致命的 消息还包括#3

16:47:09.575[主要]致命的地狱世界-你好,这是致命的 还有消息#4

post_loggerDOTinfo

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


任何提示,谢谢~

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

但是,您的配置是一个针对log4j-1.x的属性文件

Log4j2不了解基于文件的配置的属性。必须提供XML(或Jason或YAML)配置文件。Log4j2将在类路径中查找名为Log4j2.xml的配置文件。如果将其放在其他位置,则需要使用
log4j.configurationFile
system属性告诉log4j2路径

log4j2有许多示例配置(文档比log4j-1.x好得多);我建议从显示的示例配置开始

如果Log4j2找不到配置,它将使用默认配置,只记录控制台的错误和致命级别


最后,请注意,对于log4j2,您可以在类路径中同时使用log4japi和log4j核心jar文件。

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

project (root)
|_src
  |_main
    |_java
    |_resource (add log4j2.xml here)
  |_test
    |_java
    |_resource
我使用的是IntelliJ、最新的log4j core和以下配置文件示例:

您是否初始化了
-Dlog4j.configuration=
属性?您的类路径中有哪些JAR?您使用的是
log4j2
还是
log4j
log4j.properties
文件在哪里?是追加器名称
文件
还是
控制台
?@SotiriosDelimanolis-我相信追加器名称是控制台您已声明
根记录器
使用名为
控制台
的未配置追加器,但已命名并配置了追加器
文件
。从2.4版开始,Log4j现在支持通过属性文件进行配置。请看,我没有设法使log4j.properties文件正常工作(付出了适度的努力),因为我坚持使用xml文件。