旅するえんじにあ - Engineers to Travel -

旅するエンジニアの気まま備忘録

【Linux】tailコマンドでaccess.logやerror.logを見易くする

仕事でもそうですが、自分のシステムでもエラーログを流す時 大抵リアルタイムで見たいものです。

なのでtail -fなどのコマンドを使って見るわけですが 整形されていない且つ、流れるログを追うのは目が疲れます。 まぁ整形した状態で吐きだせよって話なのですが、仕事先ではそうも行かないことが多いのです。 自分一人ならいいんですがね。

ということでtailで流れるログを置換整形して見易くする方法です。

通常エラーログ等を見る時は

tail -f 20141110_error.log

というコマンドで流しながら確認します。 ただ、これだと今の環境の場合、改行されず1行で表示されるため とても見にくい表示になります。

そこでperlです。

tail -f 20141110_error.log | perl -pe 's/\n/\n\n/g'

ここではワンライナーperlを使っています。 オプション指定しているのは

-e オプション
-e オプションに与えられた文字列をスクリプトとして実行する

-p オプション
これは与えたプログラムの外に
”while(<>) { ・・・ ; print ; } ” 
があるのと同じような動作をする(完全に等価ではない、らしい)

正直-pについては何いってるか自分の足りない頭では理解できなかったが このページを見て3分で理解できた。

http://www.hp.phys.titech.ac.jp/serino/perl.html

さて、ということでperlでは何しているかというと 置換してます。 改行を2回行うように。

こうすることによって区切りがはっきりして少し見易くなります。 更にログの場合は文字列で[\n]なんて出力されるものや半角スペース4つで区切られるものもあります。 置換をうまく使うことによってログがより見やすい形になっていきます。

置換を複数回行う場合はセミコロンで区切る

tail -f 20141110_error.log | perl -pe 's/\\n/\n\n/g; s/\n/\n\n/g'

コマンドはひとつずつ順番に実行されるので、置換は最後にすること。

tail -f 20141110_error.log | grep 'hoge' | perl -pe 's/\\n/\n\n/g; s/\n/\n\n/g'