LoginSignup
6
8

More than 5 years have passed since last update.

logbackのファイルサイズによるローテート

Last updated at Posted at 2019-01-11

前提

Java(Spring Boot)のログ出力にlogbackを使っている。

「ログが20MBになったらローテートして、過去分は20ファイル保持して欲しい」
と言われたが、やり方が全然わからなかったので調べてみました。

logback-spring.xml

これをsrc/main/resource配下に置いとくとローテートしました。

logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE logback>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <!-- 環境ごとの設定 -->
    <springProfile name="local">
        <!-- ログのディレクトリを指定。仮に/tmp -->
        <property name="LOG_DIR" value="/tmp" />
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <!-- ログのファイル名とパス -->
            <file> ${LOG_DIR}/adg.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.FixedWindowRollingPolicy">
                <!-- ローテート後のファイル名。".zip"とかつけると勝手に圧縮される -->
                <fileNamePattern> ${LOG_DIR}/adg_%i.log</fileNamePattern>
                <!-- ファイルの後につける番号の最大/最小。保持する数 -->
                <minIndex>1</minIndex>
                <maxIndex>20</maxIndex>
            </rollingPolicy>
            <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
                <!-- ファイルサイズによってローテートする -->
                <maxFileSize>20MB</maxFileSize>
            </triggeringPolicy>
            < encoder>
                <!-- ログ出力のフォーマット -->
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5level] [%thread]  [%file:%line %method] %msg%n</pattern>
            </encoder>
        </appender>
    </springProfile>

    <!-- 環境ごとの設定(こんな感じで書き分けてみた) -->
    <springProfile name="prod">
        <!-- ログのディレクトリを指定(環境で変えてみた) -->
        <property name="LOG_DIR" value="/var/log" />
        ・・・
    </springProfile>

    <!-- ログレベル -->
    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration>

application.properties(抜粋)

application.properties
# local環境の設定
spring.profiles.active=local

ログ出力

ちなみに僕と同じくそもそもログ出力どうやるんじゃ?
という人もいるかもなので一応メモ。

LogTestController.java
package jp.adg.fuji.log.controllers;

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class LogTestController {
    public void logLog() {
        try {
            // これだけでログが出る
            log.info("infoログ");
            // 処理を記載
        } catch (Exception e) {
            // log.warn()もある
            log.error("errorログ", e);
        }
        return;
    }
}

失敗

・最初はlogback.xmlというファイル名で作成
→springProfileを使用したところエラーが発生
→ファイル名をlogback-spring.xmlに変更

・layoutタグを使用していたが非推奨らしいのでencoderに修正
https://logback.qos.ch/codes.html#layoutInsteadOfEncoder

・application.propertiesにもログの出力先を記載していたせいでエラーとなっていた
→application.properties側での記載を削除

・何も考えずに、コピペして
org/springframework/boot/logging/logback/base.xml
をincludeしてたらcatalina.outにも(意図せず)アプリのログが出ていた

その他

これもあった方がいいよ、
環境ごとの設定はもっとこうした方がいい、
という設定とかあれば教えて欲しいです!

6
8
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8