【问题标题】:Complete "Scala Logging" Example完整的“Scala Logging”示例
【发布时间】:2015-05-17 21:43:03
【问题描述】:

我正在尝试使用 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. 我的班级基本上是这样的:

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

    <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>
    

【问题讨论】:

    标签: scala logging


    【解决方案1】:

    对于那些仍在为如何使您的 scala-logging 在您的 sbt 项目中工作而苦苦挣扎的人。他们只需要按照以下步骤操作:

    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. 使用 trait LazyLogging 扩展您的 Scala 类或对象:

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

    P.S: 只是一个侧面说明 logger 已经是 trait LazyLogging 的成员,所以你不需要创建它(如上例所示)

    【讨论】:

    • import com.typesafe.scalalogging.LazyLogging 对我有用。
    • logger.debug 工作正常,有没有办法让 println 也写入同一个文件?
    【解决方案2】:

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

    【讨论】:

    • 其实我已经有了相应的文件'logback.xml'。它仍然不打印任何调试消息。我相应地更新了我的问题。
    • 尝试将libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.2" 添加到build.sbt。您还应该删除旧版本("scala-logging-slf4j_2.11" % "2.1.2");他们可能会发生冲突。
    • 是的,添加libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.2" 即可解决。非常感谢。
    • 有这方面的文档吗?调试日志级别也不适用于我。
    • @Vinay 你应该把它作为一个单独的问题来问。
    【解决方案3】:

    您已经很接近了,但您必须在 apply 方法中为 com.typesafe.scalalogging 中的 Logger 伴侣使用 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 的参考。希望对您有所帮助!

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2023-03-22
    • 2014-03-13
    • 2022-10-15
    • 1970-01-01
    • 2021-04-14
    • 2011-05-03
    相关资源
    最近更新 更多