JavaScriptを有効にしてください

tail でログに色を付ける方法

 ·  ☕ 2 分で読めます

tail ログに色を付ける方法

── 行を消さない、安全なログ可視化テクニック

ログを見ていると、

  • ERROR を赤くしたい
  • WARN / INFO を色分けしたい
  • 大量のログから重要な行を一瞬で見つけたい

という場面は日常的にあります。

よくある解決策として grep --color を使う例が紹介されますが、grep を重ねる方法は行が消えるリスクがあり、ログ監視や調査では事故につながりかねません。

この記事では、

  • 行を一切削除せず
  • tail / cat のどちらでも使える
  • 実務で安心して使える

sed + ANSIエスケープ による色付け方法を紹介します。


方針:抽出しない、表示だけを装飾する

重要なのはこの一点です。

ログの内容は変えず、見た目だけを変える

  • ❌ grep:マッチしない行を消す可能性がある
  • ✅ sed:文字列を置換するだけ(行は必ず残る)

以降の例はすべて 行を消さない安全な構成です。


色付けの仕組み(最低限)

ターミナルは ANSI エスケープシーケンスで色を制御します。

  • 色開始:\x1b[<色コード>m
  • 色解除:\x1b[0m

よく使う色コード:

コード
31
32
33
水色36
太字赤1;31

このコードを sed で文字列に差し込みます。

tail で色を付ける(リアルタイム監視)

基本:追記されるログを色付きで見る

1
tail -f app.log | sed -E 's/(ERROR)/\x1b[31m\1\x1b[0m/g'
  • 新しく追加された行だけが流れる
  • 監視用途の基本形

実務定番:ログレベルを色分けして監視

1
2
3
4
5
6
7
tail -f app.log | sed -E \
  -e 's/(FATAL)/\x1b[1;31m\1\x1b[0m/g' \
  -e 's/(ERROR)/\x1b[31m\1\x1b[0m/g' \
  -e 's/(WARN|WARNING)/\x1b[33m\1\x1b[0m/g' \
  -e 's/(INFO)/\x1b[32m\1\x1b[0m/g' \
  -e 's/(DEBUG)/\x1b[36m\1\x1b[0m/g' \
  -e 's/(TRACE)/\x1b[90m\1\x1b[0m/g'

これだけで、

  • エラーが即視認できる
  • INFO に埋もれない
  • 行が欠ける心配もない

という 安全なログ監視ができます。


よくある NG パターン

grep を重ねる例(非推奨)

1
tail -f app.log | grep ERROR | grep WARN
  • マッチしない行は消える
  • 「ログが出ていない」のか「消えている」のか分からなくなる

👉 監視用途では避けるべき


使い回すなら関数化する(おすすめ)

毎回長いコマンドを書くのが面倒な場合は、
シェルに関数として登録すると楽です。

1
2
3
4
5
6
7
8
9
logcolor() {
   sed -E \
   -e 's/(FATAL)/\x1b[1;31m\1\x1b[0m/g' \
   -e 's/(ERROR)/\x1b[31m\1\x1b[0m/g' \
   -e 's/(WARN|WARNING)/\x1b[33m\1\x1b[0m/g' \
   -e 's/(INFO)/\x1b[32m\1\x1b[0m/g' \
   -e 's/(DEBUG)/\x1b[36m\1\x1b[0m/g' \
   -e 's/(TRACE)/\x1b[90m\1\x1b[0m/g'
}

使い方:

1
tail -f app.log | logcolor

まとめ

  • ログの色付けは 「行を消さない」ことが最重要
  • sed を使えば 安全に装飾だけできる
  • cat も同様にも使える
  • tail -f はリアルタイム監視向け
  • 同じ色付けルールを両方で使い回せる

色付けはあくまで補助ですが、
正しく使うとログの読みやすさと安心感が一段上がります。

共有

こぴぺたん
著者
こぴぺたん
Copy & Paste Engineer