Как иметь хвост -f показать цветной выход

Я хотел бы иметь возможность задерживать вывод файла журнала сервера, который имеет такие сообщения, как:

INFO
СЕРЬЕЗНЫЙ

и т. д., и если это SEVERE, показать строку красным цветом; если это INFO, зеленый. Какой псевдоним можно настроить для команды tail, которая поможет мне сделать это?

216 голосов | спросил Amir Afghani 1 MarpmTue, 01 Mar 2011 22:13:29 +03002011-03-01T22:13:29+03:0010 2011, 22:13:29

19 ответов


200

Попробуйте многопользовательский . Это обобщение tail -f. Вы можете смотреть несколько файлов в отдельных окнах, выделять строки на основе их содержимого и т. Д.

multitail -c /path /to /log

Цвета настраиваются. Если цветовая схема по умолчанию не работает для вас, напишите ее в файле конфигурации. Например, вызовите multitail -cS amir_log /path /to /log со следующим ~ /.multitailrc:

ColorScheme: amir_log
cs_re: зеленый: INFO
cs_re: красный: ТЯЖЕЛАЯ

Другое решение, если вы находитесь на сервере, где неудобно устанавливать нестандартные стандартные инструменты , заключается в объединении tail -f с sed или awk для добавления цвета последовательности контроля выбора. Для этого требуется tail -f сбросить свой стандартный вывод без задержки, даже когда его стандартный вывод является каналом, я не знаю, делают ли это все реализации.

tail -f /path /to /log | awk '
  /INFO /{print "\ 033 [32m" $ 0 "\ 033 [39m"}
  /SEVERE /{print "\ 033 [31m" $ 0 "\ 033 [39m"}
'

или sed

tail -f /path /to /log | sed --unbuffered \
    -e '/\(.* INFO. * \) /\ o033 [32m \ 1 \ o033 [39m /' \
    -e '/\(.* SEVERE. * \) /\ o033 [31m \ 1 \ o033 [39m /'

Если ваш sed не является GNU sed, замените \ o033 на буквенный escape-символ.

Еще одна возможность - запустить tail -f в буфере оболочки Emacs и использовать возможности раскраски синтаксиса Emacs.

ответил Gilles 1 MarpmTue, 01 Mar 2011 23:29:36 +03002011-03-01T23:29:36+03:0011 2011, 23:29:36
97

grc , общий colouriser довольно круто.

Просто сделай

grc tail -f /var/log/apache2/error.log

и наслаждайтесь!

Вы также найдете его на GitHub .

ответил thias 3 +04002011-10-03T18:57:32+04:00312011bEurope/MoscowMon, 03 Oct 2011 18:57:32 +0400 2011, 18:57:32
44

Вы посмотрели ccze ? У вас есть возможность настроить цвета по умолчанию для некоторых ключевых слов, используя опцию -c или непосредственно в вашем файле конфигурации. Если ваш экран очищается после раскраски, вы должны использовать опцию -A.

Edit:

Если вы действительно хотите, чтобы полная строка была красной, вы также можете попробовать следующее:

$ tail -f myfile.log | perl -pe '/. * SEVERE. * /\ e [1; 31m $ & \ e [0m /g'

\ e [1; 31m даст вам красный цвет. Если вам нужен желтый, используйте \ e [1; 33m), а для зеленого используйте \ e [1; 32m. \ e [0m восстанавливает нормальный цвет текста.

ответил uloBasEI 1 MarpmTue, 01 Mar 2011 23:09:51 +03002011-03-01T23:09:51+03:0011 2011, 23:09:51
28

Посмотрите lnav , расширенный просмотрщик файлов журнала.

lnav  lnav

Он также может печатать различные форматы.

До:

lnav-before-pretty

После:

lnav-pretty

ответил bagonyi 24 FebruaryEurope/MoscowbTue, 24 Feb 2015 17:46:50 +0300000000pmTue, 24 Feb 2015 17:46:50 +030015 2015, 17:46:50
20

Вы можете использовать радугу , которая окрашивает строки на основе регулярных выражений:

rainbow --red = 'SEVERE. *' --green = 'INFO. *' tail -f my-file.log

Он также поставляется в комплекте с предопределенными конфигурациями , для пример журналов Tomcat:

rainbow --config = tomcat tail -f my-file.log
ответил nicoulaj 3 MaramThu, 03 Mar 2011 01:28:44 +03002011-03-03T01:28:44+03:0001 2011, 01:28:44
14

Вы можете использовать colortail :

colortail -f /var /log /messages
ответил Kartik M 26 AMpFri, 26 Apr 2013 10:16:21 +040016Friday 2013, 10:16:21
9

Также обратите внимание, что если вы хотите просто искать one подходящее регулярное выражение, GNU grep с - color будет работать, просто проведите свой tail.

ответил mattdm 16 MarpmWed, 16 Mar 2011 17:04:41 +03002011-03-16T17:04:41+03:0005 2011, 17:04:41
7

Мне очень нравится colorex . Простой, но все же удовлетворяющий.

tail -f /var /log /syslog | colorex -G '[0-9] {2}: [0-9] {2}: [0-9] {2}' -b $ (имя хоста)
ответил Brian M. Hunt 18 TueEurope/Moscow2012-12-18T21:52:50+04:00Europe/Moscow12bEurope/MoscowTue, 18 Dec 2012 21:52:50 +0400 2012, 21:52:50
6

Чтобы получить цветной вывод из стандартных команд, таких как grep, вы должны установить этот псевдоним в .bashrc

# Пользовательские псевдонимы и функции
alias grep = 'grep --color = auto'

, когда вы grep что-то в своем файле, вы видите что-то вроде этого (но, вероятно, красным):

[root @ linuxbox mydir] # grep "\ (INFO \ | SEVERE \)" /var /log /logname
эта запись является  INFO 
 SEVERE  эта запись является предупреждением!
эта запись является  INFO 
эта запись является  INFO 
 SEVERE  эта запись является предупреждением!

, если вы хотите использовать tail или awk и хотите, чтобы цвет выдержал в трубе, тогда псевдонима недостаточно, и вы должны использовать - color = always, например:

[root @ linubox mydir] # grep --color = always "\ (INFO \ | SEVERE \)" /var /log /logname | tail -f | awk '{print $ 1}'
это
<Б> СУРОВОЙ 
это
это
<Б> СУРОВОЙ 

Если вам нужен цветной текст с awk, история немного сложная, но более мощная, например:

[root @ linubox mydir] # tail -f /var /log /messages | awk '{if ($ 5 ~ /INFO /) print "\ 033 [1; 32m" $ 0 "\ 033 [0m"; else if ($ 1 ~ /SEVERE /) print "\ 033 [1; 31m" $ 0 "\ 033 [0m"; else print $ 0} '
эта запись является  INFO 
 SEVERE эта запись является предупреждением! 
это еще один вход
 эта запись является INFO 
это еще один вход
 эта запись является INFO 
 SEVERE эта запись является предупреждением! 

с каждой строкой в ​​собственном цвете.

Есть много других способов получить раскрашенный текст из оболочки с другими инструментами, и они хорошо описаны другими членами.

ответил tombolinux 3 PM00000070000002931 2012, 19:57:29
5

На основе ответа @uloBasEI я попытался использовать ... | perl ... | perl ..., но Linux-канал становится немного сумасшедшим и слишком медленным. Если я помещаю все правила только в одну команду perl, она отлично работает.

Например, создайте файл perl colorTail.pl , как показано ниже:

#! /usr /bin /perl -w

в то время как (<STDIN>) {
    my $ line = $ _;
    чавкать ($ строка);
    для ($ линии) {
        с /== >. * & л; == /\ е [1; 44m $ & амп; \ е [0 м /ги; #tail кратное имя файла на синем фоне
        s /.* исключение. * | at. * /\ e [0; 31m $ & \ e [0m /gi; #java errors & stacktraces в красном
        s /информация * /\ е [1;. 32м $ & амп; \ е [0 м /ги; #info замена в зеленом
        s /предупреждение * /\ е [1;. 33й $ & ампы; \ е [0 м /г; #warning замена желтого цвета
    }
    print $ line, "\ n";
}

Используйте его как:

tail -f * .log | perl colorTail.pl
tail -f * .log -f ** /*. log | perl colorTail.pl

ПРИМЕЧАНИЕ: вы можете использовать его на MobaXTerm тоже! Просто загрузите плагин perl с сайта MobaXTerm .

ответил surfealokesea 10 J000000Thursday14 2014, 17:08:16
3
tail -f /var /log /logname | source-highlight -f esc -s log
ответил 16 MarpmWed, 16 Mar 2011 14:56:36 +03002011-03-16T14:56:36+03:0002 2011, 14:56:36
3

Одним из решений, которое работает для раскрашивания всех видов текста, а не только файлов журнала, является инструмент Python, colout .

pip install colout
myprocess | colout REGEX_WITH_GROUPS color1, color2 ... [attr1, attr2 ...]

Если любой текст в выводе «myprocess», который соответствует группе 1 регулярного выражения, будет окрашен в цвет 1, группу 2 с цветом2 и т. д.

Например:

tail -f /var /log /mylogfile | (\ w + \ (\)): (. +) $ 'белый, черный, голубой, жирный, полужирный, нормальный

то есть. первая группа регулярных выражений (parens) соответствует начальной дате в файле журнала, вторая группа соответствует имени файла python, номеру строки и имени функции, а третья группа соответствует сообщению журнала, которое появляется после этого. Это выглядит так:

 файл журнала с цветным форматированием

Обратите внимание, что строки или части строк, которые не соответствуют ни одному из моих регулярных выражений, по-прежнему повторяются, поэтому это не похоже на «grep -color» - ничто не отфильтровано из вывода.

Очевидно, что это достаточно гибко, что вы можете использовать его с любым процессом, а не только с хвостовыми лог-файлами. Обычно я просто нажимаю новое регулярное выражение «на лету» в любое время, когда хочу что-то раскрасить. По этой причине я предпочитаю использовать любой настраиваемый инструмент для обработки лог-файлов, потому что мне нужно только изучить один инструмент, независимо от того, что я раскрашиваю: журнал, тестовый вывод, выделение синтаксиса фрагментов кода в терминале и т. Д.

ответил Jonathan Hartley 19 PM00000010000004231 2015, 13:44:42
2

Бесстыдный плагин: я написал инструмент под названием TxtStyle , который делает что-то похожее, как упомянутые выше варианты. Вы можете запустить его следующим образом:

tail -f /var /log /syslog | txts --regex '\ d +'

Вы также можете определить именованные стили в файле конфигурации (~ /.txts.conf) и использовать его так:

ifconfig | txts --name ifconfig
Стиль

(ifconfig определяется из коробки)

ответил armandino 5 FebruaryEurope/MoscowbTue, 05 Feb 2013 00:51:43 +0400000000amTue, 05 Feb 2013 00:51:43 +040013 2013, 00:51:43
1

Я написал функцию bash, которая принимает до трех параметров и делает grep-подобный фильтр в текстовом файле и выводит текст на экран в цвете.

Я также хотел бы увидеть функцию хвоста, которая сделает это, но еще не нашла.

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

функция multigrep () {

    #THIS WORKS - воссоздайте это, используя входные параметры
    #sed -En '/(App) | (Spe) /p' ./flashlog.txt;

    filename = "/Пользователи /stevewarren /Библиотека /Предпочтения /Macromedia /Flash \ Player /Logs /flashlog.txt";
    paramString = "";

    для элемента в "$ @"
        делать
            #echo $ element;
            paramString = "$ paramString ($ элемент) |";
        сделанный

    #TRIM FINAL | ВЫКЛ ПАРАМЕТРЫ
    paramString = $ {paramString: 0: $ {# paramString} -1};

    #CREATE SED EXPRESSION - '/($1)|($2)|(...)/p'
    paramString = " '/$ paramString /р'";

    #CREATE SED FUNCTION, CALL ON FILE
    paramString = "sed -En $ paramString ./flashlog.txt"

    echo $ paramString;
    echo "$ {txtbld} $ (tput setaf 7)"> ./flashlog_output.txt;
    eval $ paramString>> ./flashlog_output.txt;
    эхо> ./flashlog_output.txt;
    #cat ./flashlog_output.txt;

    cat ./flashlog_output.txt | прочитав LINE
    делать

        [[$ 1 & & $ {1-x}]] & & &
            если grep -q $ 1 <<$ LINE; тогда
                echo "$ (tput setaf 3) $ LINE"
            фи

        [[$ 2 & & $ {2-x}]] & & &
            если grep -q $ 2 <<$ LINE; тогда
                echo "$ (tput setaf 7) $ LINE"
            фи


        [[$ 3 & & $ {3-x}]] & &
            если grep -q $ 3 <<$ LINE; тогда
                echo "$ (tput setaf 6) $ LINE"
            фи

    сделанный
}
ответил Steve Warren 5 MaramTue, 05 Mar 2013 00:43:06 +04002013-03-05T00:43:06+04:0012 2013, 00:43:06
1
дело     argsPerlColor = "$ {argsPerlColor} $ {argsPerlColor: +,} s # $ {arg} # $ n $ {color [$ i]} $ & $ {END} #gi" # Так: gtta использовать perl     пусть i + = 1 & & ((i = 8)) & & i = 0 # AIX KSH88 не распознает "let i ++" сделанный # egrep -i "$ {argsToGrep}" | sed $ {argsSedColor} | egrep -v "grep | sed" # AIX sed несовместимость с аргументом Ignore # (($ #> 0)) & & & (egrep -i "$ {argsToGrep}" | perl -p -e $ {argsPerlColor}) || cat # эта линия цвета & grep слова, НЕ будет действовать как "tail -f" (($ #> 0)) & & (perl -p -e $ {argsPerlColor}) || cat # эта строка просто окрашивает слова }

3. Использование

команда | egrepi word1 .. wordN

ответил scavenger 7 AMpSun, 07 Apr 2013 02:02:41 +040002Sunday 2013, 02:02:41
1

Вы также можете взглянуть на lwatch

tail -f /var /log /syslog | lwatch - вход -

ответил Michael Krupp 17 J0000006Europe/Moscow 2015, 23:52:23
1

Что касается цветовых кодов, я бы использовал tput:

red = $ (tput -Txterm setaf 1)
norm = $ (tput -Txterm sgr0)
bold = $ (tput -Txterm полужирный)

Смотрите для справки: man tput

Тогда:

tail -F myfile.log | sed "s /\ (. ERROR. * \) /$ red $ bold \ 1 $ norm /g"
ответил Fabien Bouleau 2 J0000006Europe/Moscow 2016, 12:12:37
0

grc точно!

настройте свои колры с регулярным выражением в файле: ~ .grc /conf.tail (или любое другое имя)

regexp =. * (выберите. *) $
цветы = без изменений, голубых
=====
regexp =. * (обновление. *) $
colors = неизменный, жирный желтый
=====
regexp =. * (insert. *) $
colors = неизменный, жирный желтый
=====
регулярное выражение =. * (ЭМИ = \ D +). *
colors = неизменный, обратный зеленый
=====
регулярное выражение =. * HTTP. * /отдых /contahub.cmds. (. *?) /(\ ш *). * $
цветов = без изменений, зеленый, пурпурный
=====
регулярное выражение =. * HTTP. * /M /.*\.(.*? Фасад) /(\ ш *). * $
colors = неизменный, подчеркивание зеленый, подчеркивание пурпурный

:

grc -c conf.tail tail -f log /tomcat /catalina.out

Результаты: кадр

информация для настройки grc: https://github.com/manjuraj/config/blob/master /.grc/sample.conf

ответил Flavio 2 32016vEurope/Moscow11bEurope/MoscowWed, 02 Nov 2016 01:27:15 +0300 2016, 01:27:15
0

Опубликован некоторое время назад Утилита Node Js - цвет журнала-цвета

tail -f file | lch -red error warn -green success
lch -f-файл -red.bold error warn -underline.bgGreen success
ответил gliviu 19 PM00000010000004031 2015, 13:27:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132