web-dev-qa-db-ja.com

「Scala Logging」の完全な例

Typesafeの Scala Logging を使用しようとしていますが、デバッグメッセージを出力できませんでした。 Scalaロギングがデフォルトの画面にデバッグメッセージを出力することを期待していますが、機能しません。完全な例は、何を変更すべきかが非常に役立つか、具体的なアドバイスになるでしょう。 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を発見しましたが、どのモジュールがそれをインストールしたか、および関連があるかどうかはわかりません。ログレベルを「デバッグ」に変更しましたが、効果はありません。

    <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>
    
28
jans

IIRCでは、デフォルトで情報レベルからメッセージを出力します。これを変更するには、logback.xmlファイルをsrc/main/resourcesに入れる(または-Dlogback.configurationFile=/path/to/config.xml JVMパラメーターを使用する)必要があります。 Logbackドキュメントの Configuration の章を参照してください。

9
Alexey Romanov

Sbtプロジェクトでscala-loggingを機能させる方法にまだ苦労している人のために。次の手順に従うだけです。

  1. これらの2つの依存関係をbuild.sbtに追加します。

    libraryDependencies += "com.typesafe.scala-logging" %% "scala-logging" % "3.1.0"
    libraryDependencies += "ch.qos.logback" % "logback-classic" % "1.1.2"
    
  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>
    
  3. 特性LazyLoggingを使用して、Scalaクラスまたはオブジェクトを拡張します。

    import com.typesafe.scalalogging.slf4j.LazyLogging
    class MyClass extends LazyLogging {
      logger.debug("This is very convenient ;-)")
    }
    
  4. 終わった。

追記:loggerはすでに特性LazyLoggingのメンバーであるため、作成する必要はありません(上記の例のように)

52
Vinay

近いですが、com.typesafe.scalaloggingloggerコンパニオンのapplyメソッドでSLF4Jロガーを使用してLoggerインスタンスを宣言する必要があります。 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のリファレンスです。それが役に立てば幸い!

2
Joseph Sawyer