依赖日志未显示

时间:2015-06-09 00:00:24

标签: scala logging playframework slf4j logback

我有一个名为FrontEnd的Play项目,其依赖项是另一个名为Logic的项目。

在Logic项目的build.sbt文件中,我添加了slf4j和logback:

name := "Logic"

version := "1.0-SNAPSHOT"

scalaVersion := "2.11.1"

seq(bintrayResolverSettings:_*)

libraryDependencies += "org.slf4j" % "slf4j-api" % "1.7.5"

libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.2"

我还在Logic项目中创建了一个Logging特征

package logic.logging

import ch.qos.logback.classic.Logger
import org.slf4j.LoggerFactory

trait Logging {
  protected val logger = LoggerFactory.getLogger(this.getClass().getSimpleName().stripSuffix("$"))
}

然后,我在FrontEnd项目中包含了Logic项目:

name := "Frontend"

version := "1.0"

scalaVersion := "2.11.1"

lazy val logicProj = RootProject(file("../logic"))

lazy val root = (project in file(".")).enablePlugins(PlayScala).dependsOn(logicProj)

最后,为了测试日志记录功能,我在FrontEnd

中创建了一个Global对象
import play.api.GlobalSettings
import play.api.Application
import play.api.Logger
import logic.logging.Logging

object Global extends GlobalSettings with Logging {
  override def onStart(app: Application) = {
    logger.info("Logic's logger: Application is started!!!")
    Logger.info("FrontEnd's logger: Application is started!!!")
  }
}

控制台上的输出是:

[info] application - FrontEnd's logger: Application is started!!!
[info] play - Application started (Dev)

换句话说,logic.logging.Logging中的记录器无法登录到控制台。我想知道是否有人知道为什么以及如何解决它。

PS:根据this,它可能与多个绑定有关,即Logic中的Logback和FrontEnd的Play库中的logback。但是,我不想从Logic中删除logback,因为项目本身是一个独立的控制台应用程序,需要将输出记录到控制台。

修改:即使从Logic libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.2"中删除build.sbt,问题仍然存在。

1 个答案:

答案 0 :(得分:0)

最后,我发现日志没有显示,因为它没有"注册"播放日志配置。可以通过将以下行添加到configuration文件的application-logger.xml标记中来修复此问题:

<logger name="logger" level="INFO" />

然后,我更新Logging对象以在所有记录器中包含记录器前缀:

package logic.logging

import ch.qos.logback.classic.Logger
import org.slf4j.LoggerFactory

trait Logging {
  protected val logger = LoggerFactory.getLogger("logger.%s".format(this.getClass().getSimpleName().stripSuffix("$")))
}

它的作用是输出:

[info] logger.Global - Logic's logger: Application is started!!!
[info] application - FrontEnd's logger: Application is started!!!