Javaでログファイルを解析していると、
「特定の文字列を含む行だけをサクッと抽出したい」
という場面は非常によくあります。
本記事では、最短・シンプル・実務で即使えるJavaコードに絞って、
ログファイルから特定行を抽出する方法を解説します。
この記事で分かること
-
Javaでログファイルを1行ずつ読み込む最短コード
-
特定キーワードを含む行だけを抽出する方法
-
Java 8以降(Stream API)を使った最小構成
-
大きなログファイルでも使える理由
前提条件
-
Java 8以上
-
テキスト形式のログファイル
例:app.log
最短コード(Stream API版)
まずは結論です。
最短で目的を達成できるコードがこちら👇
ポイント
-
Files.lines()で 1行ずつストリーム処理 -
filter()で 特定文字列を含む行だけ抽出 -
forEach()で そのまま標準出力
👉 無駄な変数・List化なし
👉 ログ解析用途としてはこれが最短クラス
抽出条件を変える例
複数キーワードを抽出したい場合
正規表現で抽出したい場合
抽出結果をファイルに出力する場合
標準出力ではなく、別ファイルに書き出したい場合はこちら。
※ Java 16未満の場合は collect(Collectors.toList()) を使用してください。
なぜこの方法が良いのか?
✔ メモリ効率が良い
-
Files.lines()は 遅延読み込み -
巨大ログでも 一括読み込みしない
✔ 可読性が高い
-
「読む → 絞る → 出力する」が1行で分かる
-
ログ解析用途としてレビューもしやすい
✔ 実務でそのまま使える
-
バッチ処理
-
障害調査
-
運用ログの一次解析
よくあるNG例(非推奨)
❌ 巨大ログでメモリを圧迫
❌ 障害調査バッチでは危険
公式マニュアル
この処理では Java の
[Files.lines メソッド(Oracle公式)](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#lines-java.nio.file.Path-)
を使用しています。
詳細な仕様については、Oracle公式ドキュメントも参考にしてください。
Stream API の filter や forEach の動作については、
[Java Stream API の公式解説(Oracle)](https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html)
が分かりやすいです。
まとめ
-
ログから特定行を抽出するなら Stream API一択
-
最短コードは以下の3行で完結
「とにかく早く原因行を抜き出したい」
そんな場面で、このコードをそのまま使ってください。

