GeekFactory

int128.hatenablog.com

Spring Bootアプリケーションのログファイル運用

Spring Bootアプリケーションのログファイル運用についてメモ。

前提

Spring Bootのログ

Spring Bootのログはデフォルトでは標準出力に出力される。ログファイルを出力するにはapplication.ymlで設定するか、JVMに起動オプションを渡す。

java -jar app.jar --logging.path="$LOG_PATH"

上記を指定すると、10MBのサイズでローテーションされる。最大で8世代まで保持される。

  • spring.log ←最も新しい
  • spring.log.1 (10MB)
  • spring.log.2 (10MB)
  • spring.log.7 (10MB) ←最も古い

最大世代に達した場合は最も大きい番号のログファイルが削除されて、番号がシフトされる。上記の場合は .7 が削除されて、.6.7 にリネームされる。

FluentdやCloudWatch Logsでログを収集する場合は spring.log をtailすればよい。8世代を超えたものは自動的に削除されるので、ガベージは気にしなくてよい。

GCのログ

GCガベージコレクション)のログはデフォルトでは出力されない。ログファイルを出力するにはJVMに起動オプションを渡す必要がある。

JAVA_OPTS=(
  "-Xloggc:$LOG_PATH/gc.log"
  "-XX:+UseGCLogFileRotation"
  "-XX:GCLogFileSize=10M"
  "-XX:NumberOfGCLogFiles=5"
  "-XX:+PrintGCDetails"
  "-XX:+PrintGCDateStamps"
)

java "${JAVA_OPTS[@]}" -jar app.jar

上記を指定すると、10MBのサイズでローテーションされる。最大で5世代まで保持される。

  • gc.log.0 ←古いもの
  • gc.log.1.current ←現在アクティブなもの

現在アクティブなものに .current が付与される。最大世代に達した場合は小さい番号から再利用される。

FluentdやCloudWatch Logsでログを収集する場合は gc.log.*.current をtailすればよい。8世代を超えたものは自動的に削除されるので、ガベージは気にしなくてよい。