[Terminal] tailでのlog監視時にErrorやWarningの行の色を変えてエラーに気づきやすくする
はじめに
アプリケーションを開発運用しているエンジニアの方はほぼ毎日logを見ていると思います。
監視の方法としてはlessやtailで監視されているのではないかと思います。
私はtailを使うことが多いです。
そして漠然と監視をするのではなく、
- Fatal : 文字:赤
- Error : 文字:赤
- Warning : 文字:黄
とカラーリングさせることで監視しやすくしています。
重要なlogを見落とさないためのターミナルの表示のカスタマイズ方法を紹介します。
ANSI escape sequencesをperlコマンドで使用する
ANSI escape sequencesを使うとターミナルの表示をカスタマイズできます。
下記のようにtailしたものをパイプでperlコマンドに投げれば文字がカラーリング表示されます。
$ tail -f dev.log | perl -pe 's/.*ERR.*/\033\[0;31m$&\033\[0m/gi'
ただコマンドが長くて面倒臭いですね。私は頭が悪いのでカラーコードが覚えられません。。。
なので違うやり方をとっています。
PerlのTerm::ANSIColorを使ったスクリプトを作る
私はPerlのTerm::ANSIColorを使ったスクリプトを作成してコマンドで利用しています。
私が作成したSampleスクリプトを載せておきます。
(改善の余地があると思いますので、好きに改善してください。)
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
# @see https://perldoc.perl.org/Term/ANSIColor.html
use Term::ANSIColor qw(:constants);
my %setting = ();
my $reset = RESET;
my @regexList = ();
# check arguments
my $isInvalid = (@ARGV == 0) || ($ARGV[0] eq '') || (@ARGV % 2 != 0);
if ($isInvalid) {
&printErrMsg();
exit 1;
}
# preparation
while (my $regex = shift) {
my $color = shift;
my $isInvalid = ($regex eq '') || ($color eq '');
if ($isInvalid) {
&printErrMsg();
exit 1;
}
$setting{$regex} = eval($color);
push(@regexList, $regex);
}
# operation
while(<>) {
foreach my $regex(@regexList) {
my $color = $setting{$regex};
s/($regex)/${color}${1}${reset}/g;
}
print;
}
##
# function for use Term::ANSIColor
#
# @param string $msg message
##
sub printMsgOnRed($) {
my ($msg) = @_;
print BOLD WHITE ON_RED ${msg}, RESET, "\n";
}
##
# function for output error message
##
sub printErrMsg() {
&printMsgOnRed("Argument is incorrect. Please check again.");
&printMsgOnRed("Usage: perl rcg.pl [regex] [color] [regex] [color] ...");
&printMsgOnRed("e.g ) tail -f /usr/local/var/log/error.log | perl rcg.pl '.*ERR.*' 'BOLD WHITE ON_RED'");
}
exit 0;
使い方はこんな感じです。カラーコードよりも直感的ですよね。
$ tail -f dev.log | perl rcg.pl '.*ERR.*' 'RED'
また引数を変えるとこんな感じにもできます。
$ tail -f dev.log | perl rcg.pl '.*ERR.*' 'BOLD WHITE ON_RED'
ERRだけでなくDEBUGをしていするなど複数もいけちゃいます。
$ tail -f dev.log | perl rcg.pl '.*ERR.*' 'BOLD WHITE ON_RED' '.*DEBUG.*' 'BOLD GREEN'
使い方は
perl rcg.pl [regex] [color] [regex] [color] ...
です。colorにはTerm::ANSIColorの定数が使えるようになっていますので、リンク先のページのConstant Interfaceを参照してください。
おわりに
log監視の工夫が簡単にできますのでぜひ試してみてください。
どなたかのお役に立てれば幸いです。
Author And Source
この問題について([Terminal] tailでのlog監視時にErrorやWarningの行の色を変えてエラーに気づきやすくする), 我々は、より多くの情報をここで見つけました https://qiita.com/masaharu_jp/items/80b0d0a0b7aa435c5b7a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .