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

时间:2015-01-11 22:48:12

标签: 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");


    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 [main]致命的HelloWorld - 您好,这是致命的   消息16:47:09.575 [主要]致命的HelloWorld - 您好,这是致命的   消息也是,#2

     

16:47:09.575 [main]致命的HelloWorld - 您好,这是致命的   消息另外,#3

     

16:47:09.575 [main]致命的HelloWorld - 您好,这是致命的   消息也是,#4

     

post_loggerDOTinfo

我对我班级中使用的属性文件感到有些困惑。有没有办法追溯我使用的log4j的版本,以及它获取log4j属性信息的位置?

任何提示赞赏,谢谢!〜

2 个答案:

答案 0 :(得分:2)

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

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

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

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

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

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

答案 1 :(得分:0)

如果使用的是IntelliJ,请确保将log4j2.xml放在src / main / resource文件夹中。如果项目仅记录致命消息,这通常意味着您将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