【发布时间】:2015-08-13 20:18:31
【问题描述】:
即使我已将赏金奖励给以下拥有 试图提供帮助,原始问题仍未得到解答。没有实际 存在可行的解决方案以确保配置 logback.groovy 日志记录在 junit 测试中得到尊重。测试加载 logback 配置,它确实报告了正确的级别,但仍然是 实际测试记录(仅通过 slf4j)位于 ANY 或 TRACE 等级
我知道其他人也遇到过同样的问题,而且非常 当大型项目的测试由于控制台而需要更长的时间时很烦人 日志记录过于冗长。我不能继续向 这个问题。我希望有人提出一个好的解决方案 允许在不同级别正确配置测试日志记录 通过系统属性。然后,可以进行不同的配置 为项目创建,以便能够在不同的日志记录阈值级别配置测试。
我的日志记录是通过 logback.groovy 文件由 logback 配置的
现在,当我的聚合所有其他项目的 Maven POM 项目启动时,它会将所有系统属性传递给它们以设置正确的日志记录级别。
但是,当 junit 测试运行时,由于某种原因,即使测试类 static @beforeClass 确保正确配置了 logback,记录器也不会选择正确的级别。
问题不是测试中的记录器,--嗯 - 是的,它们也是--,真正的问题是运行的代码部分中的记录器(我所有的程序记录器无处不在)是设置为错误的日志记录级别。配置程序测试时,他们没有了解日志记录。
但是,当 logback 使用 logback.goovy 文件初始化时,项目报告正确。但是,实际的日志记录级别设置为 TRACE 或 ALL
从下面的输出中,很明显 logback 已配置为 INFO。但是 TRACE 的第一个项目日志记录语句(最后一行)显示没有被采纳。
帮助。
-------------------------------------------------------
T E S T S
-------------------------------------------------------
Running groovy.text.StreamingTemplateEngineTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.245 sec
Running net.abcd.templating.InlinerTest
01:22:15,265 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - Added status listener of type [ch.qos.logback.core.status.OnConsoleStatusListener]
01:22:15,290 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - Setting ReconfigureOnChangeFilter scanning period to 5 minutes
01:22:15,290 |-INFO in ReconfigureOnChangeFilter{invocationCounter=0} - Will scan for changes in [[C:\Users\ABDC\Dropbox\workspace\abcd\AbcdTemplating\conf\logback.groovy]] every 300 seconds.
01:22:15,290 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - Adding ReconfigureOnChangeFilter as a turbo filter
01:22:15,312 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - About to instantiate appender of type [ch.qos.logback.core.ConsoleAppender]
01:22:15,316 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - Naming appender as [STDOUT]
***********************************************************
LOGGING MODE PROPERTY 'net.abcd.logging.level' SET TO: [info]
IT CAN BE SET TO: OFF, ERROR, WARN, INFO, DEBUG, TRACE, ALL, INFO
***********************************************************
getLogLevel() returned 'INFO'
01:22:15,496 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - Setting level of logger [ROOT] to INFO
01:22:15,532 |-INFO in ch.qos.logback.classic.gaffer.ConfigurationDelegate@1e8c3cb - Attaching appender named [STDOUT] to Logger[ROOT]
01:22:15.846 [main] TRACE net.abcd.templating.Inliner - Document:
我的 logback.groovy 文件是:
displayStatusOnConsole()
scan('5 minutes') // Scan for changes every 5 minutes.
setupAppenders()
setupLoggers()
def displayStatusOnConsole() {
statusListener OnConsoleStatusListener
}
def setupAppenders() {
appender('STDOUT', ConsoleAppender) {
encoder(PatternLayoutEncoder) {
pattern = "%d{HH:mm:ss.SSS} [%thread] %-5level %-16logger{50} - %msg%n"
}
}
}
def setupLoggers() {
def loglevel = getLogLevel()
println("getLogLevel() returned '${loglevel}'")
root(loglevel, ['STDOUT'])
}
def getLogLevel() {
def mode = System.getProperty('net.abcd.logging.level', '')
println("***********************************************************")
println("")
println("LOGGING MODE PROPERTY 'net.abcd.logging.level' SET TO: [${mode}]")
println("IT CAN BE SET TO: OFF, ERROR, WARN, INFO, DEBUG, TRACE, ALL, INFO")
println("")
println("***********************************************************")
switch(mode.toLowerCase()){
case 'off':
return OFF
case 'error':
return ERROR
case 'warn':
return WARN
case 'info':
return INFO
case 'debug':
return DEBUG
case 'trace':
return TRACE
case 'all':
return ALL
default:
return INFO
}
}
【问题讨论】:
-
我不知道它是否有帮助,但是 JUnit 安装了它自己的类加载器,这会干扰日志框架。
-
@lllogiq 我知道。 .... 那么为什么由 junit 启动的配置报告正确,即使个别测试不正确。以及如何解决这个问题?
标签: java maven logging slf4j logback