【Scala】Scala ~ Logging / SLF4J ~

■ はじめに

Apache Flink でのロギングを調べていたので
そこら辺の周辺の知識を纏めておく

目次

【1】SLF4J
 補足:Facade (ファサード)
【2】Hello world
 1)sbt
 2)サンプル
【3】SLF4J + Log4j 2
 1)sbt
 2)設定ファイル
 3)サンプル
 4)出力例
【4】Apache Flink のロギング

【1】SLF4J

* SLF4J = Simple Logging Facade for Java
* どのログ出力ライブラリを使ってもいいように
 汎用的なログ出力API(ファサード)を提供する

補足:Facade (ファサード)

* 以下の関連記事を参照のこと

ファサードパターン ~ Facade ~
https://dk521123.hatenablog.com/entry/2011/09/04/002622

【2】Hello world

1)sbt

libraryDependencies ++= Seq(
  "org.slf4j" % "slf4j-api" % "2.0.7",
  "org.slf4j" % "slf4j-simple" % "2.0.7"
)

slf4j-api
https://mvnrepository.com/artifact/org.slf4j/slf4j-api
slf4j-simple
https://mvnrepository.com/artifact/org.slf4j/slf4j-simple

2)サンプル

import org.slf4j.Logger
import org.slf4j.LoggerFactory

object Main extends App {
  val logger = LoggerFactory.getLogger("Main")
  logger.info("Hello World")
}

【3】SLF4J + Log4j 2

1)sbt

libraryDependencies ++= Seq(
  "org.slf4j" % "slf4j-api" % "2.0.7",
  "org.apache.logging.log4j" % "log4j-core" % "2.20.0",
  "org.apache.logging.log4j" % "log4j-slf4j2-impl" % "2.20.0"
)

2)設定ファイル

* src/main/resources/log4j2.xml として保存する

src/main/resources/log4j2.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <Console name="Console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{yyy/MM/dd HH:mm:ss.SSS} %-5level - %msg%n" />
        </Console>
    </Appenders>

    <Loggers>
        <Root level="info">
            <AppenderRef ref="Console" />
        </Root>
    </Loggers>
</Configuration>

3)サンプル

import org.slf4j.Logger
import org.slf4j.LoggerFactory

object Main extends App {
  val logger = LoggerFactory.getLogger("Main")
  logger.info("Hello World! - 1")
  logger.debug("Hello World!!! - 2")
}

4)出力例

2023/06/28 00:07:10.623 INFO  - Hello World! - 1

補足:説明

設定ファイルで「<Root level="info">」とあったので
「logger.info("Hello World! - 1")」は、出力されたが
「logger.debug("Hello World!!! - 2")」は、Debugなので出力されなかった

【4】Apache Flink のロギング

https://nightlies.apache.org/flink/flink-docs-master/docs/deployment/advanced/logging/

より抜粋
~~~~~~~
The logging in Flink uses the SLF4J logging interface.
This allows you to use any logging framework that supports SLF4J,
 without having to modify the Flink source code.

By default, Log4j 2 is used as the underlying logging framework.
~~~~~~~

参考文献

https://www.nextdoorwith.info/wp/se/slf4j/
https://zenn.dev/yyamada12/articles/860701683ada37
https://kagamihoge.hatenablog.com/entry/2015/01/20/212230

関連記事

Scala ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2023/03/10/193805
Scala ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/03/12/184331
Scala ~ 基本編 / 文字列 ~
https://dk521123.hatenablog.com/entry/2023/01/07/000000
ファサードパターン ~ Facade ~
https://dk521123.hatenablog.com/entry/2011/09/04/002622
Apache Flink ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2023/05/29/000000