完成 "Scala Logging" 个示例

Complete "Scala Logging" Example

我正在尝试使用 Typesafe 的 Scala Logging 但无法让它打印任何调试消息。我希望 Scala Logging 将调试消息打印到默认屏幕,但它不起作用。一个完整的示例将非常有帮助,或者具体建议要更改的内容也很棒。我使用 Scala 2.11。这是我所做的:

  1. 我添加了对build.sbt的依赖:

    libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging" % "3.1.0"
    

    尽管我不确定是否需要这样做,但我添加了以下行但没有任何区别:

    libraryDependencies += "com.typesafe.scala-logging" % "scala-logging-slf4j_2.11" % "2.1.2"
    
  2. 我的 class 基本上是这样的:

    import com.typesafe.scalalogging._
    
    class MyClass extends LazyLogging {
      // ...
      logger.debug("Here goes my debug message.")
      // ...
    }
    
  3. 我发现了文件 ./src/main/resources/logback.xml 但不确定安装了哪个模块以及它是否相关。我将日志级别更改为 "debug" 没有效果。

    <configuration>
    
      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
          <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
      </appender>
    
      <logger name="scala.slick" level="DEBUG"/>
    
      <root level="debug">
        <appender-ref ref="STDOUT" />
      </root>
    </configuration>
    

您很接近,但是您必须在 com.typesafe.scalalogging 中的 Logger 同伴的 apply 方法中使用 SLF4J 记录器声明一个 logger 实例。在您的 build.sbt 中包括:

libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging" % "3.1.0"

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

那么这将起作用:

import com.typesafe.scalalogging._
import org.slf4j.LoggerFactory

class MyClass extends LazyLogging {
  // ...
  val logger = Logger(LoggerFactory.getLogger(this.getClass))
  logger.debug("Here goes my debug message.")
  // ...
}

Here 是对 LoggerFactory 的引用。希望对您有所帮助!

IIRC 它将默认从信息级别开始打印消息。要更改此设置,您需要将 logback.xml 文件放入 src/main/resources(或使用 -Dlogback.configurationFile=/path/to/config.xml JVM 参数)。请参阅 Logback 文档中的 Configuration 章节。

对于那些仍在为如何在 sbt 项目中使用 scala 日志记录而苦苦挣扎的人。他们只需要遵循以下步骤:

  1. 在你的build.sbt中添加这两个依赖:

    libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging" % "3.1.0"
    libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.2"
    
  2. 在您的 /src/main/resources/ 中创建一个文件 logback.xml 并将下面提到的内容粘贴到该文件中。

    <configuration>
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <appender name="FILE" class="ch.qos.logback.core.FileAppender">
            <!-- path to your log file, where you want to store logs -->
            <file>/Users/yourusername/test.log</file>
            <append>false</append>
            <encoder>
                <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            </encoder>
        </appender>
    
        <root level="debug">
            <appender-ref ref="STDOUT" />
            <appender-ref ref="FILE" />
        </root>
    </configuration>
    
  3. 扩展您的 Scala class 或具有特征 LazyLogging:

    的对象
    import com.typesafe.scalalogging.slf4j.LazyLogging
    class MyClass extends LazyLogging {
      logger.debug("This is very convenient ;-)")
    }
    
  4. 完成了。

P.S:请注意,logger 已经是 trait LazyLogging 的成员,因此您无需创建它(如上例所示)