【问题标题】:Disable scalatest logging statements when running tests from maven从 maven 运行测试时禁用 scalatest 日志记录语句
【发布时间】:2014-12-01 00:42:58
【问题描述】:

禁用对最大规模 log4j 消息进行日志记录的方法是什么:

log4j.properties如下:

log4j.rootLogger=INFO,CA,FA

#Console Appender
log4j.appender.CA=org.apache.log4j.ConsoleAppender
log4j.appender.CA.layout=org.apache.log4j.PatternLayout
log4j.appender.CA.layout.ConversionPattern=%d{HH:mm:ss.SSS} %p %c: %m%n
log4j.appender.CA.Threshold = INFO


#File Appender
log4j.appender.FA=org.apache.log4j.FileAppender
log4j.appender.FA.append=false
log4j.appender.FA.file=target/unit-tests.log
log4j.appender.FA.layout=org.apache.log4j.PatternLayout
log4j.appender.FA.layout.ConversionPattern=%d{HH:mm:ss.SSS} %p %c{1}: %m%n
log4j.appender.FA.Threshold = INFO

..
log4j.logger.org.scalatest=WARN

但是,我们看到 INFO 级别 scalatest log4j 消息:

2014-11-30 14:25:57,263 INFO  [ScalaTest-run-running-DiscoverySuite] Configuration.deprecation (Configuration.java:warnOnceIfDeprecated(840)) - hadoop.native.lib is deprecated. Instead, use io.native.lib.available
2014-11-30 14:25:57,493 INFO  [ScalaTest-run-running-DiscoverySuite] hbase.HBaseCommonTestingUtility (HBaseTestingUtility.java:startMiniCluster(840)) - Starting up minicluster with 1 master(s) and 2 regionserver(s) and 2 datanode(s)
2014-11-30 14:25:57,499 INFO  [ScalaTest-run-running-DiscoverySuite] hbase.HBaseCommonTestingUtility (HBaseTestingUtility.java:setupClusterTestDir(390)) - Created new mini-cluster data directory: /shared/hwspark/target/

【问题讨论】:

  • 有解决这个问题的办法吗?我也深受其害。
  • @Malcolm 您需要确保要使用的 log4j.properties 位于类路径的第一个目录中。
  • 感谢您的回复!你是偶然使用 sbt 的吗?如果是这样,如何修改类路径?我试过用“unmanagedClasspath in Test += -Dlog4j.configuration=src/main/resources/log4j.properties”来做,但没有用。
  • 我无法弄清楚类路径的事情。我确实找到了这个解决方案。它运行良好: org.slf4j.LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME) .asInstanceOf[ch.qos.logback.classic.Logger] .setLevel(ch.qos.logback.classic.Level.WARN)

标签: scalatest


【解决方案1】:

或者,您可以在其中一个测试中的任何位置添加这段代码,

org.slf4j.LoggerFactory.getLogger(org.slf4j.Logger.ROOT_LOGGER_NAME)
  .asInstanceOf[ch.qos.logback.classic.Logger]
  .setLevel(ch.qos.logback.classic.Level.WARN)

这会将所有日志记录设置为WARN 级别。

【讨论】:

  • 你是我的男人!这工作的家伙。我用它来关闭我的 spark scala 日志
  • 这里是什么 Malcolm 和 @annonymous_guy,你们可以看看这个:stackoverflow.com/questions/59848344/…
【解决方案2】:

这些日志消息实际上并不是由 ScalaTest 打印的,而是由您在 ScalaTest 测试中使用的东西打印的。 “ScalaTest”出现在其中的原因是 ScalaTest 在执行套件和测试时确实会更改线程的名称,因此如果有人有一个永远挂起的套件并进行线程转储进行调查,那么更明显的是什么测试和套件导致运行挂起。 Log4J 似乎在方括号中打印出线程名称,这样可以提示您这些日志消息的来源。

【讨论】:

  • 同意。我将在此处复制我对 scalatest ML 的回复:我应该更新,是的,在运行 spark 时,log4j.properties 是从第三方 jar 文件之一中提取的。正如您所描述的与scalatest无关。我需要了解如何在运行 maven 时正确指定 log4j.properties 文件 - 而不是让 log4j 只需从类路径中的某处选择它选择的任何一个。
【解决方案3】:

在我的情况下,它是 slick.relational 我查看了在 ScalaTest-run-running-.... 信息中报告的类的类路径,并发现要在导入的包中找到该类,并将该特定包添加到 logback .xml 为

<logger name="slick.relational" level="INFO"/>

在您的情况下,搜索 HBaseTestingUtility 或那里报告的其他类以查找其中包含它的 jar,并从包前缀中计算出您的 logback 记录器名称。

【讨论】:

    猜你喜欢
    • 2016-11-16
    • 2011-01-05
    • 2015-04-07
    • 2017-09-25
    • 1970-01-01
    • 2011-07-12
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多