2

Я часто использую консоль Mac для мониторинга журналов моего веб-сервера. Эти журналы довольно многословны, и становится трудно прокручивать их, чтобы отслеживать ошибки.

Каждое сообщение в журнале имеет формат [ГГГГ-ММ-ДД ЧЧ: ММ: СС.sss] <INFO, WARN, ERROR> <Имя потока>

Можно ли как-нибудь настроить Консоль для цветного кодирования сообщений, имеющих тег Error? Если нет, каков идеальный способ просеять эти журналы? Обратите внимание, что часто важно видеть, что произошло непосредственно перед ошибкой.

1 ответ1

2

Вы можете использовать Терминал и эту функцию оболочки:

cless () 
{ 
   # less-like function that colors specified word
   # 'while read' reads every line and saves it to variable $REPLY
    while read; do
        # If line contains the word to highlight, grep with option --color...
        if [ $(echo $REPLY | grep -c $1) -eq 1 ]; then
            echo $REPLY | grep --color=always $1;
        else
        # ... otherwise simply output the line
            echo $REPLY;
        fi;
    # continue until end of file, paging with 'less'
    done < $2 | less -R
}

Требуется два аргумента: слово для выделения и файл для анализа.

Чтобы использовать его, откройте Терминал в Приложениях> Утилиты> Терминал и введите;

$ function cless { while read; do if [ $(echo $REPLY | grep -c $1) -eq 1 ]; then echo $REPLY | grep --color=always $1; else echo $REPLY; fi; done < $2 | less -R; }
$ cless ERROR /path/to/my/logfile.log

Как и в случае с less , используйте ПРОБЕЛ или F для прокрутки вперед и B для прокрутки назад. Если вы обычно ищете слово ERROR, создайте псевдоним:

$ alias cerror='cless ERROR'
$ cerror /path/to/my/logfile.log

Чтобы автоматически загрузить функцию и псевдоним при запуске терминала, добавьте эти строки в файл ~/.bashrc :

function cless { while read; do if [ $(echo $REPLY | grep -c $1) -eq 1 ]; then echo $REPLY | grep --color=always $1; else echo $REPLY; fi; done < $2 | less -R; }
alias cerror='cless ERROR'

и перезагрузите его:

$ . ~/.bashrc

Если вы хотите выполнить поиск без учета регистра, замените grep на grep -i (например, grep -c $1 станет grep -i -c $1).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .