Text-Processing

Shell - 根據模式自定義日誌文件每一行的顏色

  • October 25, 2016

我想更改使用 wim、less 或其他方式顯示大(約 6000 行)日誌文件的方式,以簡化問題檢查。

我想突出顯示基於模式(即,…)的日誌中的某些行errorwarning/info或隱藏其他一些行。

我可以使用哪些工具?我只需要一個shell腳本嗎?重要的是,在此過程之後,我可以使用 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

我會推荐一個基於awkValentin B. 解決方案的 shell 腳本:

$ 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在原始模式下使用,例如:

colorize mylog.txt | less -R

awk,正如其他答案中提到的,絕對是首先要達到的工具。

但從長遠來看,它並不是唯一的工具。

AL Lambert’slogtool是專門為後處理日誌文件而設計的,並且有一個複雜的(而且文件很糟糕)配置系統,允許一個人為 13 種顏色中的每一種分配一個充滿正則表達式的文件。

貓 *.log | 日誌工具

它具有理解具有 TAI64N 時間戳的日誌的區別。

為此,添加:

著色問題

唉,其中一些工具的著色非常錯誤。它們硬連線控制序列,而不是使用terminfo 中的setaf/setab等。

另請注意,由於更微妙的原因,著色很棘手,幾乎沒有著色程序能做到這一點。為了讓它完全正確,著色器必須處理自動邊距和 DEC VT掛起換行機制,我還沒有看到任何著色器這樣做。GNUgrep在這方面有一個相當著名的著色錯誤,但這不是僅限於grep.

進一步閱讀

引用自:https://unix.stackexchange.com/questions/318755