Complete “Scala Logging” Example

后端 未结 3 1744
忘了有多久
忘了有多久 2020-12-23 10:04

I\'m trying to use Typesafe\'s Scala Logging but couldn\'t get it to print any debug message. I expect Scala Logging to print debug message to the default screen but it does

相关标签:
3条回答
  • 2020-12-23 10:31

    For those who're still struggling for how to make your scala-logging work in your sbt project. They just need to follow these steps:

    1. Add these two dependencies in your build.sbt:

      libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging" % "3.1.0"
      libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.2"
      
    2. Create a file logback.xml in your /src/main/resources/ and paste below mentioned content in that file.

      <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. Extend your Scala class or object with trait LazyLogging:

      import com.typesafe.scalalogging.slf4j.LazyLogging
      class MyClass extends LazyLogging {
        logger.debug("This is very convenient ;-)")
      }
      
    4. It's done.

    P.S: Only a side note that logger is already a member of trait LazyLogging so you don't need to create it (as shown in above example)

    0 讨论(0)
  • 2020-12-23 10:37

    You're close, but you have to declare a logger instance using an SLF4J logger in the apply method for the Logger companion in com.typesafe.scalalogging. In your build.sbt include:

    libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging" % "3.1.0"
    
    libraryDependencies += "org.slf4j" % "slf4j-api" % "1.7.10"
    

    Then this will work:

    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 is a reference for LoggerFactory. Hope it helps!

    0 讨论(0)
  • 2020-12-23 10:39

    IIRC it'll print messages starting from info level by default. To change this, you need to put logback.xml file into src/main/resources (or use -Dlogback.configurationFile=/path/to/config.xml JVM parameter). See Configuration chapter in Logback documentation.

    0 讨论(0)
提交回复
热议问题