前提
Java(Spring Boot)のログ出力にlogbackを使っている。
「ログが20MBになったらローテートして、過去分は20ファイル保持して欲しい」
と言われたが、やり方が全然わからなかったので調べてみました。
logback-spring.xml
これをsrc/main/resource
配下に置いとくとローテートしました。
<?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(抜粋)
# local環境の設定
spring.profiles.active=local
ログ出力
ちなみに僕と同じくそもそもログ出力どうやるんじゃ?
という人もいるかもなので一応メモ。
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
にも(意図せず)アプリのログが出ていた
その他
これもあった方がいいよ、
環境ごとの設定はもっとこうした方がいい、
という設定とかあれば教えて欲しいです!