проблемы с колоризацией

проблемы с колоризацией

Я хотел бы изменить способ отображения большого (~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.

К этому следует добавить:

проблемы с колоризацией

Увы, некоторые из этих инструментов делают колоризацию очень неправильно. Они жестко подключают управляющие последовательности, а не используют 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>

Эта команда отобразит все полные строки файла журнала, которые будут иметь шаблон, указанный выше.

Связанный контент