【发布时间】:2017-11-27 14:24:39
【问题描述】:
我创建了一个包含测试用例及其相应功能的 maven 项目。验证检查的所有功能都放在 src/main/java 下。测试用例也是 src/test/java 的一部分。我已将其放在 src/main/resources 中的 log4j.properties 下方。
# Root logger option
log4j.rootLogger=info, file,stdout
# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=/tmp/reports/logs/log.out
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
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
#To console
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{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
此外,在我添加的每个类文件中,以下行以及以下导入:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
初始化日志:
static Logger log = LoggerFactory.getLogger(<class name>.class);
我正在使用log.info("") 创建日志。
另外,在 pom.xml 中,添加了以下依赖项:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.25</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
但我看到日志没有在控制台和文件/tmp/reports/logs/log.out 中生成,但日志文件/tmp/reports/logs/log.out 已成功创建,但没有附加日志,控制台中也没有生成日志。
我确实在控制台上看到了日志,但它们绝对不是log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
格式。
我假设它们是在控制台上生成的,因为我已经导入了与 log4j 相关的 jar。
有人可以帮忙吗?
【问题讨论】:
-
如果只做测试用例的话,用slf4j-simple岂不是更方便?
-
我也用过slf4j-simple jar,但是还是没有生成日志
-
slf4j-simple 不是用来生成日志的,它是用来将你的日志语句输出到标准输出的,这样你就可以在单元测试的过程中看到发生了什么,仅此而已。
-
好的,但是在这种情况下,它不仅仅是单元测试用例。需要保存日志以了解不顺利的地方。我还生成每次运行结束的报告,需要在错误/异常上说“查看日志以获取更多信息”。所以,我需要将它们记录在某个地方。除了生成日志(这实际上很重要)之外,一切正常
-
我不是 Log4J 1.x 配置方面的专家,所以我无法帮助您。只是在大多数情况下,我看到测试日志只是简单地写入标准输出并由构建服务器(例如,Jenkins)保留,因此找出问题所在只需滚动浏览 Jenkins 输出即可。也就是说:如果这对您的用例来说还不够,那么请忽略我的 cmets。