トラブルシューティングを簡単にするために、wim、less、またはその他の手段を使用して大容量(〜6000行)のログファイルを表示する方法を変更したいと思います。
error
ログ内の特定の行(...など)を強調表示したり、パターンに応じて他の行を非表示にしたいです。warning
info
どのツールを使用できますか?シェルスクリプトだけが必要ですか?重要なことは、プロセスの後に検索操作を実行するためにless、vimなどを使用して出力を読み取ることができることです。
編集:ログの小さな部分:
2016/10/25 12:19:24.403355 INFO <ServiceManager.cpp#2614 TID#3> Security object has NOT been parsed
2016/10/25 12:19:24.403369 INFO <ServiceManager.cpp#1263 TID#3> Service object sequence started
2016/10/25 12:19:24.403372 DBG <ServiceManager.cpp#1276 TID#3> preinvoke succeeded
答え1
awk
Valentin B.のソリューションのようなものに基づいたシェルスクリプトをお勧めします。
$ cat colorize
awk '
function color(c,s) {
printf("\033[%dm%s\033[0m\n",30+c,s)
}
/error/ {color(1,$0);next}
/success/ {color(2,$0);next}
/warning/ {color(3,$0);next}
/INFO/ {color(4,$0);next}
/DBG/ {color(5,$0);next}
{print}
' $1
カラー出力を対話形式で表示するには、less
rawモードを使用します。たとえば、次のようになります。
colorize mylog.txt | less -R
答え2
awk
他の答えで述べたように、ツールは間違いなく最初に到達する必要があります。
しかし、長期的に使用できる唯一のツールではありません。
ALランバートlogtool
事後処理ログファイル用に特別に設計されており、正規表現でいっぱいのファイルを13色のそれぞれに割り当てることができる複雑な(悲しいことに文書化が不足している)構成システムを備えています。
cat*.logロギングツール|
TAI64Nタイムスタンプを含むログを理解する機能が特徴です。
これを行うには、次を追加します。
log-color-highlight
colout
ccze
- イーストバンカラチ
colorize
- ラドバン・ガラビク
grc
- ログウォッチャー
- ブロックする
- ジョア・キム・アンダーソン
colortail
- 虹
- ナビゲーション
着色の問題
残念ながら、これらのツールのいくつかは非常に間違ったシェーディング効果を持っています。 terminfoで setaf
/ etcを使用する代わりに、制御シーケンスをハードワイヤーします。setab
さらに、シェーディングはより微妙な理由でトリッキーであり、これを正しく処理するシェーディングプログラムはほとんどありません。完全に正確にするには、シェーダは自動マージンとDEC VTを処理する必要があります。改行待ちメカニズム、私はどのシェーダもこのようなことをするのを見たことがありません。 GNUにはgrep
この分野でかなり有名なカラーバグがありますが、これは単なる問題ではありませんgrep
。
追加読書
答え3
確認後、端末で直接使用してカラーテキストを出力できますawk
。提供された例を使用すると、displayLog.awk
次のコードを含むawkスクリプトファイルを生成できます。
# output INFO lines in cyan
$3 == "INFO" {
print "\033[36m"$0"\033[0m"
next
}
# don't display DBG lines
$3 == "DBG" {
next
}
# output WARNING lines in bright yellow
$3 == "WARNING" {
print "\033[1;33m"$0"\033[0m"
next
}
# output ERROR lines in bright red
$3 == "ERROR" {
print "\033[1;31m"$0"\033[0m"
next
}
# If you want to skip all other lines, comment next line
{print}
次に、きれいな端末ウィンドウを開き、ディスプレイが制限されていないことを確認し(一度に6000行すべてを表示できます)、次のように使用します。
$ awk -f displayLog.awk log.txt
またはユーザーのようにエリヤ・グレー彼のソリューションで提案されているように生モードで送信しますless
。
$ awk -f displayLog.awk log.txt | less -R
これだけで十分です!私の答えのサンプルコードに基づいて、色と表示する行を調整できますawk
。カラーコーディングの詳細ここ。
編集する
完全な行ではなく単一の単語にのみ色を付けたい場合(たとえば、ERRORが赤で表示されるようにするには)、次の手順を実行します。
$3 == "ERROR" {
$3 = "\033[1;31m"$3"\033[0m"
print
next
}
答え4
パターン(エラー、警告、情報など)に基づいてログ内の特定の行を強調表示するには、次のコマンドを使用します。
grep -rn "pattern" <logfile>
このコマンドは、上記のパターンでログファイルの全行をすべて表示します。