[原创] 在IntelliJ中运行Java unit test(单元测试)时打印出"log4j:ERROR Either File or DatePattern options are not set for appender"的问题

当你在IntelliJ idea中跑一个Java单元测试时,可能会发现单元测试本身没有任何问题,可以成功执行,但是IntelliJ的日志输出窗口里却打印出大量的“错误”日志,类似于下面这样:

log4j:ERROR setFile(null,true) call failed.
java.io.FileNotFoundException: / (Is a directory)
at java.io.FileOutputStream.open0(Native Method)
at java.io.FileOutputStream.open(FileOutputStream.java:270)
at java.io.FileOutputStream.<init>(FileOutputStream.java:213)
at java.io.FileOutputStream.<init>(FileOutputStream.java:133)
at org.apache.log4j.FileAppender.setFile(FileAppender.java:294)
at org.apache.log4j.FileAppender.activateOptions(FileAppender.java:165)
at org.apache.log4j.DailyRollingFileAppender.activateOptions(DailyRollingFileAppender.java:223)
at org.apache.log4j.config.PropertySetter.activate(PropertySetter.java:307)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:172)
at org.apache.log4j.config.PropertySetter.setProperties(PropertySetter.java:104)
at org.apache.log4j.PropertyConfigurator.parseAppender(PropertyConfigurator.java:842)
at org.apache.log4j.PropertyConfigurator.parseCategory(PropertyConfigurator.java:768)
at org.apache.log4j.PropertyConfigurator.configureRootCategory(PropertyConfigurator.java:648)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:514)
at org.apache.log4j.PropertyConfigurator.doConfigure(PropertyConfigurator.java:580)
at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:526)
at org.apache.log4j.LogManager.<clinit>(LogManager.java:127)
at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:66)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:281)
    (后面很长,省略)
log4j:ERROR Either File or DatePattern options are not set for appender [LOCAL].

这和你的单元测试没有任何关系,它是因为程序中使用的日志库 log4j 在默认的路径下找不到log4j配置文件导致的。如果你的项目使用了标准的目录布局,那么应该在 resources 目录下有一个 log4j.properties 配置文件,类似于下面这样:

└── test
    ├── java
    │   └── com
    │       └── codelast
    │           └── MyUnitTest.java
    └── resources
        └── log4j.properties

其中 test 目录下存放所有和单元测试相关的代码文件以及配置文件,下面有两个平级的目录:java 和 resources。
log4j.properties文件的内容:

log4j.rootLogger=INFO,stdout
log4j.appender.stdout = org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target = System.out
log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern = %d{HH:mm:ss} [%p]:%m%n

这样你再运行 IntelliJ 里的单元测试,就不会打印出上面那些超长的错误日志了。
文章来源:https://www.codelast.com/
➤➤ 版权声明 ➤➤ 
转载需注明出处:codelast.com 
感谢关注我的微信公众号(微信扫一扫):
wechat qrcode of codelast
以及我的微信视频号:

发表评论