
問題のチェックを簡素化するために、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する | logtool
TAI64N タイムスタンプを持つログを理解するという特徴があります。
これに以下を追加します:
log-color-highlight
colout
ccze
- イシュトヴァン・カラシの
colorize
- ラドヴァン・ガラビクの
grc
- ログウォッチャー
- 詰まる
- ヨアキム・アンダーソン
colortail
- 虹
- ナビゲーション
色付けの問題
setaf
残念なことに、これらのツールのいくつかは、色付けを非常に間違って行っています。terminfo の/setab
など を使用するのではなく、制御シーケンスをハードワイヤードしています。
また、色付けは微妙な理由で難しいため、色付けプログラムで正しく処理できるものはほとんどありません。完全に正しく処理するには、色付けプログラムは自動マージンとDEC VTを処理する必要があります。保留中の行折り返しメカニズムですが、これを実行するカラー化ツールはまだ見たことがありません。GNU にはgrep
この領域でかなり有名なカラー化のバグがありますが、これは に限った問題ではありませんgrep
。
参考文献
答え3
確認後、 を使用してターミナルに色付きのテキストを直接出力できます。提供された例を使用して、次のコードを含むawk
awk スクリプト ファイル (例 ) を作成できます。displayLog.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
またはユーザーにいいねジャリアグレ彼の解決策では、それをrawモードにパイプすることを提案していますless
。
$ awk -f displayLog.awk log.txt | less -R
これでうまくいくはずです!私の回答のサンプルコードに基づいて、色や表示したい行を調整できますawk
。色分けの詳細ここ。
編集
行全体ではなく 1 つの単語のみに色を付けたい場合 (たとえば、ERROR のみを赤で表示したい場合)、次のようにします。
$3 == "ERROR" {
$3 = "\033[1;31m"$3"\033[0m"
print
next
}
答え4
パターン (エラー、警告、情報など) に基づいてログの特定の行を強調表示する場合は、以下のコマンドを使用してください。
grep -rn "pattern" <logfile>
このコマンドは、上記のようなパターンを持つログファイルの完全な行をすべて表示します。