
Я хотел бы изменить способ отображения большого (~6000 строк) файла журнала с помощью wim, less или чего-то еще, чтобы упростить проверку проблем.
Мне бы хотелось выделить некоторые строки журнала на основе шаблона (например 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
решении Валентина Б.:
$ 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 | logtool
Его особенностью является понимание журналов с временными метками TAI64N.
К этому следует добавить:
log-color-highlight
colout
ccze
- Иштван Караси
colorize
- Радован Гарабика
grc
- наблюдатель за журналом
- засорить
- Йоаким Андерссон
colortail
- радуга
- инав
проблемы с колоризацией
Увы, некоторые из этих инструментов делают колоризацию очень неправильно. Они жестко подключают управляющие последовательности, а не используют setaf
/ setab
и т. д. из terminfo.
Также обратите внимание, что колоризация сложна по более тонким причинам, и почти ни одна программа колоризации не делает это правильно. Чтобы сделать это полностью правильно, колоризатор должен иметь дело с автоматическими полями и 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
ИЛИНравится пользователюjlliagreпредложенное в его решении, перевести его в режим raw 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>
Эта команда отобразит все полные строки файла журнала, которые будут иметь шаблон, указанный выше.