1. 導入:その設定、昨日のログを消していませんか?
「しまった、昨日のエラーログが消えてる……!」
以前、私はログの設定を誤り、プログラムを起動するたびにログファイルを「上書き」してしまう設定にしていました。バグの原因を調査しようと再起動した瞬間、手がかりだった過去のログがすべて消え去ったあの絶望感……。
プロの現場では、ログは「証拠」です。今回は、二度とそんな悲劇を起こさないために、Javaのロギングライブラリ Log4j 2 を使い、正しく「追記」と「保存」を行う方法を探求します。
2. Log4j 2の導入:IntelliJへの組み込み
まずは環境構築から。自分でロガーを自作(車輪の再発明)せず、信頼されたライブラリを使います。
からBinaryのzipをダウンロード。Apache Log4j公式サイト log4j-api-2.x.x.jarとlog4j-core-2.x.x.jarをプロジェクトのlibフォルダ等に配置。IntelliJの「Project Structure」→「Libraries」から、これらを追加してクラスパスを通します。
3. 外部ファイル(log4j2.xml)で「追記」と「世代管理」を死守する
コードを一切触らずに出力形式を変えられるのが Log4j の魅力です。私の失敗を繰り返さないための設定がこちらです。
【設定例:src/main/resources/log4j2.xml】
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Properties>
<Property name="LOG_DIR">./logs</Property>
</Properties>
<Appenders>
<Console name="ConsoleAppender" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
<RollingFile name="FileAppender" fileName="${LOG_DIR}/app.log"
filePattern="${LOG_DIR}/app-%d{yyyy-MM-dd}.log"
append="true">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true" />
</Policies>
</RollingFile>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="ConsoleAppender"/>
<AppenderRef ref="FileAppender"/>
</Root>
</Loggers>
</Configuration>
4. 納得ポイント:上書き?追記?それともローリング?
私の失敗を分析してわかった、ログ保存の3つのパターンです。
上書き(絶対ダメ!): 起動のたびに古いログをリセットする。調査中に再起動した瞬間、証拠が消滅します。
追記(Append): ファイルの末尾に書き足していく。過去分は残りますが、1つのファイルが数GBに膨れ上がり、開けなくなるリスクがあります。
ローリング(プロの推奨): 今回設定した方法です。「追記」しつつ、日付が変わったら「別名(app-2026-01-17.logなど)」で保存し、新しいファイルを作り直します。
5. 実践:出力結果と「追記」の確認
検証コードを実行し、一度終了してから「再度」実行してみてください。
【実行後の./logs/app.logの中身】
2026-01-18 11:30:05 [main] INFO LogTest - --- アプリケーション開始 ---
2026-01-18 11:30:05 [main] DEBUG LogTest - 計算実行: 10 / 0
2026-01-18 11:30:05 [main] ERROR LogTest - 計算中にエラーが発生しました。
... (一度終了) ...
2026-01-18 11:35:10 [main] INFO LogTest - --- アプリケーション開始 ---
append="true" のおかげで、前の実行記録が消えずに残っています!これなら、安心して再起動して調査ができます。
6. まとめ:ログは「未来の自分」を助ける唯一の手段
「昨日のログを上書きして消してしまった」という苦い経験があったからこそ、Log4jのようなライブラリが提供する「追記」や「ローリング」の機能がいかに有り難いか、心から納得できました。
適切なログ設計は、トラブルが起きた時に「過去の自分」から届く、最高のプレゼントになります。皆さんも、まずは append="true" とローリングの設定を確認することから始めてみてください!
0 件のコメント:
コメントを投稿