完成"Scala Logging"示例

jan*_*ans 29 logging scala

我正在尝试使用Typesafe的Scala Logging但无法让它打印任何调试消息.我希望Scala Logging将调试消息打印到默认屏幕,但它不起作用.一个完整的例子非常有用或具体建议改变什么也会很棒.我使用Scala 2.11.这是我做的:

  1. 我将依赖项添加到build.sbt:

    libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging" % "3.1.0"
    
    Run Code Online (Sandbox Code Playgroud)

    即使我不确定这是否是必需的,我添加了以下行但它没有任何区别:

    libraryDependencies += "com.typesafe.scala-logging" % "scala-logging-slf4j_2.11" % "2.1.2"
    
    Run Code Online (Sandbox Code Playgroud)
  2. 这是我班级基本上的样子:

    import com.typesafe.scalalogging._
    
    class MyClass extends LazyLogging {
      // ...
      logger.debug("Here goes my debug message.")
      // ...
    }
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)

Vin*_*nay 54

对于那些仍然在努力使你的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"
    
    Run Code Online (Sandbox Code Playgroud)
  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>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 使用特征扩展Scala类或对象LazyLogging:

    import com.typesafe.scalalogging.slf4j.LazyLogging
    class MyClass extends LazyLogging {
      logger.debug("This is very convenient ;-)")
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 完成.

PS:只注意记录器已经是特征LazyLogging的成员,所以你不需要创建它(如上例所示)

  • `import com.typesafe.scalalogging.LazyLogging`对我有用. (6认同)

Ale*_*nov 9

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

  • 尝试添加`libraryDependencies + ="ch.qos.logback"%"logback-classic"%"1.1.2"`to build.sbt.你还应该删除旧版本(`"scala-logging-slf4j_2.11"%"2.1.2"`); 他们可能发生冲突 (3认同)
  • 是的,添加`libraryDependencies + ="ch.qos.logback"%"logback-classic"%"1.1.2"`解决它.非常感谢. (3认同)

Jos*_*yer 5

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

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

libraryDependencies += "org.slf4j" % "slf4j-api" % "1.7.10"
Run Code Online (Sandbox Code Playgroud)

然后这将起作用:

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.")
  // ...
}
Run Code Online (Sandbox Code Playgroud)

是 LoggerFactory 的参考。希望能帮助到你!

  • `LazyLogging` trait [已经包含一个 `logger` 成员,它是 SLF4J Logger 类的一个实例](https://github.com/typesafehub/scala-logging/blob/5b45f24a35d0a4ee560cc3148bb63dde88047ede/src/main/scala typesafe/scalalogging/Logging.scala#L27-L28),所以我不认为是这样。 (7认同)