完成“Scala Logging”示例

时间:2015-03-15 20:08:04

标签: scala logging

我尝试使用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,但我不确定哪个模块安装了它以及它是否相关。我将日志级别更改为" 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>
    

3 个答案:

答案 0 :(得分:44)

对于那些仍然在为你的sbt项目进行scala-logging工作而苦苦挣扎的人。他们只需要遵循以下步骤:

  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. 使用特征LazyLogging

    扩展Scala类或对象
    import com.typesafe.scalalogging.slf4j.LazyLogging
    class MyClass extends LazyLogging {
      logger.debug("This is very convenient ;-)")
    }
    
  4. 已经完成了。

  5. P.S:只有附注记录器已经是特质LazyLogging的成员,因此您不需要创建它(如上例所示)

答案 1 :(得分:9)

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

答案 2 :(得分:2)

您已关闭,但您必须使用logger方法在apply中为Loggercom.typesafe.scalalogging方法声明一个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.")
  // ...
}

然后这将起作用:

{{1}}

Here是LoggerFactory的参考。希望它有所帮助!