1.ログ設定ファイルの作成(logback-spring.xml)
src/main/resources フォルダの直下に、logback-spring.xml という名前でファイルを作成します。Spring Bootが起動時にこのファイルを自動で見つけて読み込むため、Javaコード側での初期化設定は一切不要です。
ポイント: Spring Boot専用の logback-spring.xml という名前にすることで、本番環境と開発環境でログレベルを変えるといった「Springの機能」が使えるようになります。こちらも合わせて参照ください。
2.ロガーの宣言 (SLF4Jを使用)
ログを出力したいJavaクラスの中で、ロガーを一行宣言します。
- ポイント: 特定のログライブラリに依存しないよう、汎用的な「SLF4J」という窓口(インターフェース)を使うのがJavaの標準的な作法です。
import org.slf4j.Logger; import org.slf4j.LoggerFactory; // クラスの中で宣言 private static final Logger log = LoggerFactory.getLogger(YourClass.class);
3.ログの出力実行
System.out.println の代わりに、ログレベルに応じたメソッドを呼び出します。
- 実行:
log.info("メッセージ");やlog.error("エラー内容");と書くだけで、あとは設定ファイル(手順1)に従って自動的にファイル保存やローテーションが行われます。
まとめ:なぜこれだけで動くのか?
Spring Bootには、ログに必要な部品(LogbackやSLF4J)が最初から「標準装備」として組み込まれています。そのため、開発者は「設定ファイルを置く」ことと「ロガーで書く」ことだけに集中すれば、裏側で複雑なログ管理が勝手に回り始める仕組みになっています。
logback-spring.xmlの設定例
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="APP_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="SYSTEM_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/system.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/system.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>14</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<logger name="com.ohayo.sample" level="DEBUG" additivity="false">
<appender-ref ref="APP_FILE" />
<appender-ref ref="STDOUT" /> </logger>
<root level="INFO">
<appender-ref ref="SYSTEM_FILE" />
<appender-ref ref="STDOUT" /> </root>
</configuration>
解説① コンソール出力 (STDOUT) の追加
java -jar や Eclipse で実行しているとき、ファイルだけにログが出ると、画面が止まっているように見えて不安になります。STDOUT を追加することで、「画面で見つつ、ファイルにも残す」という開発の基本スタイルが完成します。
解説② 保存期間 (maxHistory) の設定
WebLogic などの古い環境でよくあるトラブルが、「ログが無限に溜まってサーバーのディスクを食いつぶす」ことです。
app.logは業務的に重要なので 30日分。system.logは Spring の起動ログなどが主なので 14日分。 このように期間を決めておくと、古いものから自動で削除してくれるので運用が劇的に楽になります。
解説③ additivity="false" の設定
もし「アプリのログは app.log だけに出したい(system.log には混ぜたくない)」という場合は、例のように additivity="false" を追記してください。
