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 doesn't work. A complete example would be very helpful or specific advise what to change would be great too. I use Scala 2.11. Here is what I did:
I added the dependency to build.sbt:
libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging" % "3.1.0"
Even though I'm not sure if this is required, I added the following line but it didn't do any difference:
libraryDependencies += "com.typesafe.scala-logging" % "scala-logging-slf4j_2.11" % "2.1.2"
This is how my class looks like basically:
import com.typesafe.scalalogging._
class MyClass extends LazyLogging {
// ...
logger.debug("Here goes my debug message.")
// ...
}
I discovered the file ./src/main/resources/logback.xml but am not sure which module installed it and if its relevant. I changed the log level to "debug" without effect.
<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>
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.
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:
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"
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>
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 ;-)")
}
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)
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!