Полный пример "Scala Logging"
Я пытаюсь использовать журнал регистрации Scafe Scala, но не смог его распечатать любое отладочное сообщение. Я ожидаю, что Scala Logging напечатает отладочное сообщение на экране по умолчанию, но оно не работает. Полный пример был бы очень полезным или конкретным советом, что бы изменить было бы здорово. Я использую Scala 2.11. Вот что я сделал:
-
Я добавил зависимость от 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"
-
Вот как выглядит мой класс в основном:
import com.typesafe.scalalogging._
class MyClass extends LazyLogging {
// ...
logger.debug("Here goes my debug message.")
// ...
}
-
Я обнаружил файл. /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>
Ответы
Ответ 1
IIRC он будет печатать сообщения, начиная с уровня информации по умолчанию. Чтобы изменить это, вам нужно поместить файл logback.xml
в src/main/resources
(или использовать параметр -Dlogback.configurationFile=/path/to/config.xml
JVM). См. Раздел " Конфигурация" в документации по протоколированию.
Ответ 2
Для тех, кто все еще борется за то, как сделать свою работу scala-logging в вашем проекте sbt. Им просто нужно выполнить следующие шаги:
-
Добавьте эти две зависимости в свой build.sbt
:
libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging" % "3.1.0"
libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.2"
-
Создайте файл logback.xml в вашем /src/main/resources/и вставьте ниже упомянутый контент в этот файл.
<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>
-
Расширьте класс или объект Scala с помощью LazyLogging
:
import com.typesafe.scalalogging.slf4j.LazyLogging
class MyClass extends LazyLogging {
logger.debug("This is very convenient ;-)")
}
-
Это было сделано.
PS: Только боковое примечание, что регистратор уже является участником LazyLogging, поэтому вам не нужно его создавать (как показано в приведенном выше примере)
Ответ 3
Вы близки, но вы должны объявить экземпляр 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"
Тогда это будет работать:
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.")
// ...
}
Вот ссылка для LoggerFactory. Надеюсь, поможет!