Spring Logging

ログレベル (Logging Level)

  • (ひく) いものから(たか) いものへ:trace < debug < info < warn < error

  • trace: 詳細(しょうさい)処理(しょり) フロー、バグ追跡(ついせき)使用(しよう)

  • debug: パフォーマンス分析(ぶんせき)実行(じっこう) 時間(じかん)

  • info: サービス起動(きどう) 状態(じょうたい) 、コアトランザクション結果(けっか)

  • warn: 予期(よき) される可能性(かのうせい) のあるエラー(ネットワークの一時的(いちじてき)切断(せつだん) など)。

  • error: 機能(きのう)影響(えいきょう)(あた) える深刻(しんこく) なエラー(データベース接続(せつぞく) 失敗(しっぱい) など)。


設定(せってい) (れい) (application.yml)

logging:
  config: classpath:logback-spring.xml
  level:
    root: info
    com.lex: debug

logback-spring.xml 構造(こうぞう)

コアモジュール

  • logback-core: 基本(きほん) コンポーネント(Appender, Layout)。
  • logback-classic: log4j改良版(かいりょうばん)Slf4j API を実装(じっそう)
  • logback-access: Servlet コンテナとの統合(とうごう) 、HTTP リクエストログに使用(しよう)

構造(こうぞう) 概要(がいよう)


一般的(いっぱんてき) な Appender 設定(せってい)

1. コンソール出力(しゅつりょく) (Console)

<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{50} - %msg%n</pattern>
    </encoder>
</appender>

2. ローリングファイルログ (Rolling File)

  • INFO レベルログ
<appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOG_PATH}/info-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
        <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
            <maxFileSize>10MB</maxFileSize>
        </timeBasedFileNamingAndTriggeringPolicy>
        <maxHistory>30</maxHistory>
    </rollingPolicy>
    <filter class="ch.qos.logback.classic.filter.LevelFilter">
        <level>INFO</level>
        <onMatch>ACCEPT</onMatch>
        <onMismatch>DENY</onMismatch>
    </filter>
</appender>

3. 分離(ぶんり) ログ (Sifting Appender)

  • 特定(とくてい)条件(じょうけん) (タスク ID やスレッドなど)に(もと) づいてログを(こと) なるファイルに()() むために使用(しよう)
<appender name="SIFT" class="ch.qos.logback.classic.sift.SiftingAppender">
    <discriminator>
        <key>taskId</key>
        <defaultValue>default</defaultValue>
    </discriminator>
    <sift>
        <appender name="File-${taskId}" class="ch.qos.logback.core.FileAppender">
            <file>${LOG_PATH}/${taskId}.log</file>
            <encoder>
                <pattern>%d [%thread] %msg%n</pattern>
            </encoder>
        </appender>
    </sift>
</appender>

ルートログ設定(せってい) (Root)

<root level="INFO">
    <appender-ref ref="CONSOLE" />
    <appender-ref ref="INFO_FILE" />
</root>