我有以下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属性信息的位置?
任何提示赞赏,谢谢!〜
答案 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