当前位置: 首页 > 知识库问答 >
问题:

玩斯卡拉:在测试中使用Nop记录器来抑制日志记录

锺宜
2023-03-14

我试图在我的游戏框架测试用例中抑制日志记录。实现这一点的一种方法是在类路径中使用slf4j nop jar,而不是像logback classic这样的其他实现。我能够在sbt中这样做,如下所示。

libraryDependencies += "org.slf4j" % "slf4j-nop" % "1.7.6" % "test"

(dependencyClasspath in Test) <<= (dependencyClasspath in Test) map {
  _.filterNot(_.data.name.contains("logback-classic"))
}

但是当我运行我的测试时,我仍然得到下面的错误

[info] Exception encountered when attempting to run a suite with class name: JobControllerSpec *** ABORTED ***
[info]   java.lang.NoClassDefFoundError: ch/qos/logback/classic/LoggerContext
[info]   at play.api.libs.logback.LogbackLoggerConfigurator.configure(LogbackLoggerConfigurator.scala:80)
[info]   at play.api.libs.logback.LogbackLoggerConfigurator.configure(LogbackLoggerConfigurator.scala:62)
[info]   at play.api.inject.guice.GuiceApplicationBuilder$$anonfun$applicationModule$1.apply(GuiceApplicationBuilder.scala:102)
[info]   at play.api.inject.guice.GuiceApplicationBuilder$$anonfun$applicationModule$1.apply(GuiceApplicationBuilder.scala:102)
[info]   at scala.Option.foreach(Option.scala:257)
[info]   at play.api.inject.guice.GuiceApplicationBuilder.applicationModule(GuiceApplicationBuilder.scala:101)
[info]   at play.api.inject.guice.GuiceBuilder.injector(GuiceInjectorBuilder.scala:181)
[info]   at play.api.inject.guice.GuiceApplicationBuilder.build(GuiceApplicationBuilder.scala:123)
[info]   at org.scalatestplus.play.OneAppPerSuite$class.app(OneAppPerSuite.scala:126)
[info]   at JobControllerSpec.app$lzycompute(JobControllerSpec.scala:12)
[info]   ...
[info]   Cause: java.lang.ClassNotFoundException: ch.qos.logback.classic.LoggerContext
[info]   at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
[info]   at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
[info]   at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
[info]   at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
[info]   at play.api.libs.logback.LogbackLoggerConfigurator.configure(LogbackLoggerConfigurator.scala:80)
[info]   at play.api.libs.logback.LogbackLoggerConfigurator.configure(LogbackLoggerConfigurator.scala:62)
[info]   at play.api.inject.guice.GuiceApplicationBuilder$$anonfun$applicationModule$1.apply(GuiceApplicationBuilder.scala:102)
[info]   at play.api.inject.guice.GuiceApplicationBuilder$$anonfun$applicationModule$1.apply(GuiceApplicationBuilder.scala:102)
[info]   at scala.Option.foreach(Option.scala:257)
[info]   at play.api.inject.guice.GuiceApplicationBuilder.applicationModule(GuiceApplicationBuilder.scala:101)

为什么在日志日志中对日志经典有硬依赖性,例如 scala?

这是我的依赖关系的状态

[project] $ show libraryDependencies
[info] List(org.scala-lang:scala-library:2.11.8, com.typesafe.play:twirl-api:1.1.1, com.typesafe.play:play-server:2.5.4, com.typesafe.play:play-test:2.5.4:test, com.typesafe.play:play-omnidoc:2.5.4:docs, com.typesafe.play:play-netty-server:2.5.4, com.typesafe.play:play-logback:2.5.4, com.typesafe.play:play-cache:2.5.4, com.typesafe.play:play-ws:2.5.4, com.typesafe.play:play-slick:2.0.0, com.typesafe.play:play-slick-evolutions:2.0.0, com.h2database:h2:1.4.187, mysql:mysql-connector-java:5.1.6, net.codingwell:scala-guice:4.1.0, org.scalatestplus.play:scalatestplus-play:1.5.0:test, org.slf4j:slf4j-nop:1.7.6:test)

共有1个答案

司徒隐水
2023-03-14

我没有使用<code>slf4j nop<code>的经验,但您可以在<code>test/resources/logback中为测试提供特殊的logback配置。xml将覆盖conf/logback.xml

 类似资料:
  • 我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?

  • 问题内容: 我正在编写一个服务器应用程序,该应用程序应该能够在控制台和日志文件上以不同级别登录。 问题是,如果设置了logging.basicConfig(),它将登录到控制台,但是必须在主线程中进行设置。 也可以使用logging.basicConfig(filename =’logger.log’)进行设置以写入文件。 设置用于控制台日志记录(logging.StreamHandler())或

  • 我试图从log4j1更改为log4j2。我所做的: 已删除旧配置文件log4j。xml 创建了新的配置文件log4j2。xml 创建了jboss部署结构。xml 编辑的pom 环境:野蝇10 1 EAR 4 WAR文件中没有使用web.xml。以前的log4j配置日志在EAR中(仅) Log4j2配置文件 Jboss部署结构 新的maven依赖关系 我之前说过我在SLF4j中使用log4j1。这些

  • 问题内容: 我正在考虑将Redis用于Web应用程序日志记录目的。我用谷歌搜索,有人将日志转储到Redis队列/列表中,然后将计划的工作人员转储到磁盘中。 http://nosql.mypopescu.com/post/8652869828/another-redis-use-case- centralized-logging 我希望寻求理解,为什么不直接使用Redis持久化到磁盘?如果我分配了一

  • logging 模块自 2.3 版以来一直是 Python 标准库的一部分。在 PEP 282 中有对它的简洁描述。除了 基础日志教程 之外,这些文档是非常难以阅读的。 日志记录一般有两个目的: 诊断日志 记录与应用程序操作相关的日志。例如,当用户遇到程序报错时, 可通过搜索诊断日志以获得上下文信息。 审计日志 为商业分析而记录的日志。从审计日志中,可提取用户的交易信息, 并结合其他用户资料构成用

  • 一般来说,你应该在运行时增加调试选项来调试问题;也可以把调试选项添加到 Ceph 配置文件里来调试启动问题,然后查看 /var/log/ceph (默认位置)下的日志文件。 Tip 调试输出会拖慢系统,这种延时有可能掩盖竞争条件。 日志记录是资源密集任务。如果你碰到的问题在集群的某个特定区域,只启用那个区域对应的日志功能即可。例如,你的 OSD 运行良好、元数据服务器却不行,这时应该先打开那个可疑