Полный пример "Scala Logging"

Я пытаюсь использовать журнал регистрации Scafe Scala, но не смог его распечатать любое отладочное сообщение. Я ожидаю, что 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>
    

Ответы

Ответ 1

IIRC он будет печатать сообщения, начиная с уровня информации по умолчанию. Чтобы изменить это, вам нужно поместить файл logback.xml в src/main/resources (или использовать параметр -Dlogback.configurationFile=/path/to/config.xml JVM). См. Раздел " Конфигурация" в документации по протоколированию.

Ответ 2

Для тех, кто все еще борется за то, как сделать свою работу 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"
    
  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>
    
  3. Расширьте класс или объект Scala с помощью LazyLogging:

    import com.typesafe.scalalogging.slf4j.LazyLogging
    class MyClass extends LazyLogging {
      logger.debug("This is very convenient ;-)")
    }
    
  4. Это было сделано.

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. Надеюсь, поможет!