はじめに
「BUILD SUCCESSFUL なのに ERROR が出てる…?」
と混乱したことはありませんか?
私自身、未経験からエンジニアに転職し、現在は Java(Spring Boot / Spring Batch) を使っています。
最初はログの見方がまったく分からず、
- エラーが出ている=失敗?
- ビルド成功=全部うまくいった?
- どこを見ればいいの?
と毎回悩んでいました。
この記事では、
👉 ログの見方がまったく分からない初心者向けに
👉 「BUILD SUCCESSFUL なのに ERROR が出る理由」 を
できるだけ噛み砕いて 解説します。
結論:ログで何が起きているのか
まず結論です。
✔ バッチ処理の途中で何らかのエラーは発生している
✔ ただし処理は中断されず、最後まで実行されている
✔ その結果、Gradle 的には BUILD SUCCESSFUL になっている
つまり、
バッチの中でエラーは出た
→ でも止まらずに処理を続けた
→ プロセスは正常終了した
という状態です。
📌 ビルド成功 = 処理が全部うまくいった
ではない、というのが重要なポイントです。
BUILD SUCCESSFUL の本当の意味
ログの最後に出てくるこれ👇
BUILD SUCCESSFUL in 13m 33s
これは、
Gradle のビルド/実行プロセスが異常終了しなかった
という意味です。
初心者が勘違いしやすいポイント
- ❌ 処理内容がすべて成功した
- ❌ エラーが一切なかった
ではありません。
あくまで
👉 「Java プロセスが例外で落ちずに終了した」
という意味です。
Spring / Java のログレベルを知ろう(超重要)
まずはログの基本から。
| ログレベル | 意味 |
|---|---|
| ERROR | エラー(重大な問題の可能性) |
| WARN | 警告(注意は必要だが処理は続く) |
| INFO | 通常の処理ログ |
| DEBUG | 詳細なデバッグ用ログ |
初心者の頃は
「ERROR が出た=即失敗」
と思いがちですが、実はそうとは限りません。
今回の ERROR ログは何を意味している?
ログの途中に、次のような出力があります。
【Error occurred】ID:111111
見た目は完全に「エラー」ですが、重要なのはここ👇
ポイント① 例外(Exception)が投げられていない
通常、Java で致命的なエラーが起きると、こんなログが出ます。
Exception in thread "main" ...
at xxx.java:123
これを スタックトレース と呼びます。
👉 今回のログには これが出ていません。
ポイント② プログラムがエラーを「キャッチ」している
つまり、
- 業務的にはエラー扱いのデータ
- 想定外の入力値
- 処理できないレコード
などを検知して、
ログに ERROR を出す
→ でも例外は投げない
→ 処理は継続
という設計になっている可能性が高いです。
Spring Batch ではよくある設計です。
なぜ ERROR が出ても BUILD SUCCESSFUL なのか
理由はシンプルです。
Gradle が見ているのは「終了ステータス」だけ
- ❌ 例外を投げてプロセスが落ちる → BUILD FAILED
- ✅ 例外を投げずに最後まで動く → BUILD SUCCESSFUL
アプリ内でエラーが起きたかどうかは関係ありません。
そのため、
ERROR ログが出ている
= Gradle 的には失敗
とはならないのです。
初心者向け:ERROR ログを見るときのチェックポイント
① ERROR の「前後」を見る
ERROR そのものより、
- 直前に何をしていたか
- 対象データは何か
を見るのが大切です。
業務エラーとしてログを出しているだけ、というケースも多いです。
② スタックトレースがあるか?
これが一番重要です。
✔ スタックトレースあり
→ プログラムエラーの可能性大
✔ スタックトレースなし
→ 業務エラー or 想定内エラーの可能性
③ 本当に成功したかは「DB」を見る
ログだけでは判断できないことも多いです。
- 対応履歴テーブル
- 処理結果テーブル
を 実際に SELECT して確認 しましょう。
これが一番確実です。
今回のログを初心者向けにまとめると
- 🔹 BUILD SUCCESSFUL
→ バッチは最後まで正常終了した - 🔹 ERROR ログあり
→ 処理中に業務的なエラーが発生した可能性 - 🔹 スタックトレースなし
→ 致命的なプログラムエラーではない - 🔹 成功可否の判断
→ ログだけでなく DB を確認する必要あり
おわりに
はじめの頃は
ERROR が出てるのに成功?
成功って何?失敗って何?
と本当に混乱しました。
でも、
- ビルド結果
- ログレベル
- 例外の有無
を分けて考えられるようになると、
ログが「怖いもの」から「情報源」に変わります。
同じように悩んでいる初心者の方の助けになれば嬉しいです 🙌