Slick 3.0 在单元测试时避免过多的日志记录
Slick 3.0 Avoid Excessive Logging When Unit Testing
我有一个项目,我在其中使用 Slick 为我的关系数据建模。我写了几个利用 H2 数据库的单元测试。我已经集成了一个 CI 管道,它 运行 在每次提交到我的主分支时进行单元测试!
我正在使用 sbt 作为我的构建工具,我从构建日志中看到的是它包含大量带有 DEBUG 消息的日志行。这些消息是由底层的 Slick 库编写的,我绝对想摆脱它们。我尝试了几种方法,但 none 似乎对那些 DEBUG 日志语句大军有效。
我的项目是一个基于 Play Framework 的 Web 项目,这是我在 build.sbt:
中的依赖项
libraryDependencies ++= Seq(
ws,
"io.monix" %% "monix" % "2.1.0",
"com.typesafe.slick" %% "slick" % "3.2.0",
"com.typesafe.scala-logging" %% "scala-logging" % "3.4.0",
"org.scala-lang.modules" % "scala-async_2.11" % "0.9.6",
"com.zaxxer" % "HikariCP" % "2.4.1",
"com.typesafe" % "config" % "1.3.1",
"mysql" % "mysql-connector-java" % "5.1.26",
// test
"com.typesafe.akka" %% "akka-testkit" % "2.5.2" % Test,
"org.scalatest" %% "scalatest" % "3.0.1" % Test,
"com.h2database" % "h2" % "1.4.186" % Test,
"org.scalatestplus.play" %% "scalatestplus-play" % "1.5.0" % Test
)
我尝试了以下方法:
将 build.sbt 中的日志级别设置为 INFO
日志级别 := Level.Info
很遗憾,没有任何效果!
我使用的 logback.xml 看起来像这样:
<logger name="scala.slick" level="INFO" />
<logger name="play" level="INFO" />
<logger name="application" level="INFO" />
<logger name="akka" level="INFO" />
并在我 运行 我的单元测试时使用了以下命令:
sbt -Dlogger.resource=conf/logback.xml clean coverage test coverageReport
但奇怪的是,这根本没有任何效果,因为我仍然不断看到那些烦人的 DEBUG 语句!我正在使用 Play Framework 2.5.9!
好的,这就是我从 Slick 中删除 DEBUG 语句的方法:
将我的 build.sbt 依赖项修改为:
// Dependencies needed for Slick
"com.typesafe.slick" %% "slick" % "3.2.0",
"org.slf4j" % "slf4j-nop" % "1.6.4",
"com.typesafe.slick" %% "slick-hikaricp" % "3.2.0"
在我的 build.sbt 中添加了以下内容:
javaOptions in Test +="-Dlogger.file=conf/logback.xml"
并确保在我的应用程序的 conf/ 文件夹中有一个 logger.xml! 请注意这个文件应该叫做logback.xml,或者应该以logback开头,比如logback-test.xml否则不行!
这就是我在 运行 单元测试时调用我的 sbt 的方式:
sbt clean test
我有一个项目,我在其中使用 Slick 为我的关系数据建模。我写了几个利用 H2 数据库的单元测试。我已经集成了一个 CI 管道,它 运行 在每次提交到我的主分支时进行单元测试!
我正在使用 sbt 作为我的构建工具,我从构建日志中看到的是它包含大量带有 DEBUG 消息的日志行。这些消息是由底层的 Slick 库编写的,我绝对想摆脱它们。我尝试了几种方法,但 none 似乎对那些 DEBUG 日志语句大军有效。
我的项目是一个基于 Play Framework 的 Web 项目,这是我在 build.sbt:
中的依赖项libraryDependencies ++= Seq(
ws,
"io.monix" %% "monix" % "2.1.0",
"com.typesafe.slick" %% "slick" % "3.2.0",
"com.typesafe.scala-logging" %% "scala-logging" % "3.4.0",
"org.scala-lang.modules" % "scala-async_2.11" % "0.9.6",
"com.zaxxer" % "HikariCP" % "2.4.1",
"com.typesafe" % "config" % "1.3.1",
"mysql" % "mysql-connector-java" % "5.1.26",
// test
"com.typesafe.akka" %% "akka-testkit" % "2.5.2" % Test,
"org.scalatest" %% "scalatest" % "3.0.1" % Test,
"com.h2database" % "h2" % "1.4.186" % Test,
"org.scalatestplus.play" %% "scalatestplus-play" % "1.5.0" % Test
)
我尝试了以下方法:
将 build.sbt 中的日志级别设置为 INFO
日志级别 := Level.Info
很遗憾,没有任何效果!
我使用的 logback.xml 看起来像这样:
<logger name="scala.slick" level="INFO" /> <logger name="play" level="INFO" /> <logger name="application" level="INFO" /> <logger name="akka" level="INFO" />
并在我 运行 我的单元测试时使用了以下命令:
sbt -Dlogger.resource=conf/logback.xml clean coverage test coverageReport
但奇怪的是,这根本没有任何效果,因为我仍然不断看到那些烦人的 DEBUG 语句!我正在使用 Play Framework 2.5.9!
好的,这就是我从 Slick 中删除 DEBUG 语句的方法:
将我的 build.sbt 依赖项修改为:
// Dependencies needed for Slick
"com.typesafe.slick" %% "slick" % "3.2.0",
"org.slf4j" % "slf4j-nop" % "1.6.4",
"com.typesafe.slick" %% "slick-hikaricp" % "3.2.0"
在我的 build.sbt 中添加了以下内容:
javaOptions in Test +="-Dlogger.file=conf/logback.xml"
并确保在我的应用程序的 conf/ 文件夹中有一个 logger.xml! 请注意这个文件应该叫做logback.xml,或者应该以logback开头,比如logback-test.xml否则不行!
这就是我在 运行 单元测试时调用我的 sbt 的方式:
sbt clean test