Как иметь хвост-f шоу, окрашенное выводом

Если Вы используете bash, можно использовать PIPESTATUS переменная типа массив для получения статуса выхода каждого элемента конвейера.

$ false | true
$ echo "${PIPESTATUS[0]} ${PIPESTATUS[1]}"
1 0

Если Вы используете zsh, они выстраивают, назван pipestatus (вопросы случая!) и индексы массива запускаются в одном:

$ false | true
$ echo "${pipestatus[1]} ${pipestatus[2]}"
1 0

Для объединения их в функции способом, который не теряет значения:

$ false | true
$ retval_bash="${PIPESTATUS[0]}" retval_zsh="${pipestatus[1]}" retval_final=$?
$ echo $retval_bash $retval_zsh $retval_final
1 0

Выполненное вышеупомянутое в bash или zsh и Вы получите те же результаты; только один из retval_bash и retval_zsh будет установлен. Другой будет пробел. Это позволило бы функции заканчиваться return $retval_bash $retval_zsh (отметьте отсутствие кавычек!).

271
16.03.2011, 23:51
22 ответа

Испытайте мультихвост. Это - übergeneralization tail -f. Можно наблюдать несколько файлов в отдельных окнах, выделить строки на основе их содержания, и т.д.

multitail -c /path/to/log

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

colorscheme:amir_log
cs_re:green:INFO
cs_re:red:SEVERE

Другое решение, если Вы находитесь на сервере, где это неудобно для установки нестандартных инструментов, состоит в том, чтобы объединиться 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 's/\(.*INFO.*\)/\o033[32m\1\o033[39m/' \
    -e 's/\(.*SEVERE.*\)/\o033[31m\1\o033[39m/'

Если Вашим sed не является GNU sed, замена \o033 литеральным символом ESC и удаляют --unbuffered.

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

240
27.01.2020, 19:26
  • 1
    , как можно сделать это с sed? (жаль о том, что был ленив и не изобразил его самостоятельно!), Но добавьте a sed пример также. –  Ali 28.11.2011, 18:41
  • 2
    @Ali Sed менее удобен, потому что он не имеет синтаксиса для символа ESC, Вы должны иметь его буквально в сценарии или использовать метод заключения в кавычки оболочки для работы его в. Я рекомендую использовать awk. –  Gilles 'SO- stop being evil' 28.11.2011, 19:18
  • 3
    @Gilles В Вашем tail -f с awk код, если строка не имеет ИНФОРМАЦИИ и СЕРЬЕЗНЫЙ, строка, не быть распечатанным. Как я могу распечатать оставаться строки также? (Строка не должна быть окрашена), –  Benjamin 29.06.2012, 13:32
  • 4
    @Benjamin Добавляет ; next перед закрывающими фигурными скобками для пропуска последующей обработки и новой технологической линии 1 {print} в конце (1 средства всегда). –  Gilles 'SO- stop being evil' 29.06.2012, 14:58
tail -f /var/log/logname | source-highlight -f esc -s log
3
27.01.2020, 19:26
  • 1
    source-highlight не широко установленная команда, таким образом, необходимо, по крайней мере, дать ссылку на стройплощадку. –  Gilles 'SO- stop being evil' 17.03.2011, 00:45
  • 2
    Доступный в Fedora 19. –  sjas 29.09.2013, 17:55
  • 3
    И Ubuntu 12.10. –  sjas 29.09.2013, 18:10
  • 4
    Это выглядит хорошим. Это - большой пакет по сравнению с другими в этом списке (26 МБ). Это поддерживает огромный список языков. Это может быть настроено, изменив файлы конфигурации, расположенные в:/usr/share/source-highlight / *.lang (Ubuntu). При необходимости в чем-то простом пойдите с ccze или colortail. –  lepe 27.01.2014, 05:46
  • 5
    похож на него, зависит от повышения, которое является –  ecsos 30.05.2014, 00:34

Также обратите внимание на это, если Вы просто хотите искать тот, соответствующий regex, GNU grep с --color будет работать — просто передают Ваш по каналу tail вывод через это.

12
27.01.2020, 19:26
  • 1
    OP только хотел выделить вывод, не отфильтровать его. Grep не покажет несогласующие отрезки длинной линии... –  Coderer 30.06.2014, 15:36
  • 2
    Если Вы говорите grep  -A9999  -B9999 regex, это покажет все строки, если у Вас не будет 10 000 несогласующих отрезков длинной линии подряд.   Использование что-то как GREP_COLORS="ms=31:sl=33:cx=32" grep -A9999 -B9999 SEVERE показать слово SEVERE в красном, остальная часть Сверхжестких позиций желтого цвета и всех других (НЕСЕРЬЕЗНЫХ) строк (до 9 999) в зеленом. –  G-Man Says 'Reinstate Monica' 07.08.2015, 05:45

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

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

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

rainbow --config=tomcat tail -f my-file.log

(правовая оговорка: Я - автор),

24
27.01.2020, 19:26
  • 1
    я попробовал большинство других решений, предлагаемых этому вопросу, но радуга была единственной, которая работала одинаково хорошо над солнцем, Экс-ан-Провансом, Linux, termux, Дарвином и cygwin - эти 6(!) сред, которые я использую ежедневно. Все другие включили трудные непортативные процессы сборки по крайней мере для некоторых платформ. –  Stabledog 17.05.2017, 18:15

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

Править:

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

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

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

51
27.01.2020, 19:26
  • 1
    Это не работает над Mac - я - upvoting он, потому что он работает над Linux. –  Amir Afghani 01.03.2011, 23:33
  • 2
    Upvoting, потому что, в то время как прием perl/ansi не мог бы, ccze делает. –  Shadur 13.11.2011, 18:02
  • 3
    Можно также заставить терминал отправить предупреждение или "звуковой сигнал" путем добавления \007 в конец regex, как так: perl -pe 's/(ERROR)/\033[31m$1\033[0m\007/g;'. Это работает потрясающее при использовании tmux с set -g bell-action any, в этом случае, если у Вас будет свой конец журнала в другом окне, то то имя окна предупредит каждый раз, когда regex находит соответствие. –  J.C. Yamokoski 13.11.2012, 06:15
  • 4
    @AmirAfghani, Это - сайт SE linux/unix, поэтому я не уверен, почему Вы думали, что он будет работать над Mac –  BЈовић 04.06.2013, 09:06
  • 5
    @BЈовић Mac является Unix. –  Chris Down 12.09.2013, 22:16

grc, универсальный colourizer довольно прохладен.

apt-get install grc

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

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

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

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

123
27.01.2020, 19:26
  • 1
    , Это точно, в чем я нуждался: легкий и простой. Окраска не является точно правильной для моих типов журнала (пользовательские журналы), но любая окраска помогает мне следовать за журналом. –  rennat 21.10.2011, 22:49
  • 2
    Для меня 'grc' на ошибках Debian с: OSError: [Errno 13] Разрешение отклонен. Также это зависит от Python, устанавливаемого, таким образом, это не действительно легко, если у Вас уже нет его. Я нашел, что 'ccze' работает намного лучше, напр. 'хвост-f-n 50 /var/log/starbound-server.log | ccze-A'. –  Daniel Sokolowski 09.12.2013, 05:56
  • 3
    grc в Ubuntu не отображался хороший для системных журналов или mail.log. Не легко понять, как настроить его. –  lepe 27.01.2014, 05:34
  • 4
    я нашел это более быстрым и более легким путем к colorize, чем мультихвост. Просто сделал быструю установку через источник в моей системе CentOS и обновил мою жизнь. Установит в моих других системах также. –  zeeshan 12.07.2014, 12:51
  • 5
    Это выглядит довольно ужасным на i.imgur.com/aJbIOfL.png –  mpen 03.09.2014, 05:34

Стать окрашенным выводом от стандартных команд как grep, необходимо установить это alias в Вашем .bashrc

# User specific aliases and functions
alias grep='grep --color=auto'

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

[root@linuxbox mydir]# grep "\(INFO\|SEVERE\)" /var/log/logname
this entry is an INFO 
SEVERE this entry is a warn!
this entry is an INFO
this entry is an INFO
SEVERE this entry is a warn!

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

[root@linubox mydir]# grep --color=always "\(INFO\|SEVERE\)" /var/log/logname | tail -f | awk '{ print $1 }'
this 
SEVERE
this
this
SEVERE

Если Вы хотите цветной текст с 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}'
this entry is an INFO 
SEVERE this entry is a warn!
this is another ENTRY
this entry is an INFO
this is another ENTRY
this entry is an INFO
SEVERE this entry is a warn!

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

Существуют многие другой способ получить цветной текст от оболочки с другими инструментами, и они хорошо descripted другими участниками.

7
27.01.2020, 19:26

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

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

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

ifconfig | txts --name ifconfig

(ifconfig стиль определяется из поля),

2
27.01.2020, 19:26

Мне вполне нравится колорекс. Простой, все же удовлетворяя.

tail -f /var/log/syslog | colorex -G '[0-9]{2}:[0-9]{2}:[0-9]{2}' -b $(hostname)
7
27.01.2020, 19:26

уверенный!

Я писал долго движению функцию, вызванную "egrepi", на основе 8 цветных определений переменных. Это работает ТОЛЬКО переданное по каналу как "хвост-f" окрашенный функцией.

1. setColors

во-первых, цветные переменные функционируют, чтобы быть названными сначала:


setColors ()
{
set -a
which printf >/dev/null 2>&1 && print=printf || print=print # Mandriva doesn't know about printf

hide='eval tput civis'
show='eval tput cnorm'
CLS=$(tput clear)
bel=$(tput bel)

case ${UNAME} in
AIX)
# text / foreground
N=$(${print} '\033[1;30m')
n=$(${print} '\033[0;30m')
R=$(${print} '\033[1;31m')
r=$(${print} '\033[0;31m')
G=$(${print} '\033[1;32m')
g=$(${print} '\033[0;32m')
Y=$(${print} '\033[1;33m')
y=$(${print} '\033[0;33m')
B=$(${print} '\033[1;34m')
b=$(${print} '\033[0;34m')
M=$(${print} '\033[1;35m')
m=$(${print} '\033[0;35m')
C=$(${print} '\033[1;36m')
c=$(${print} '\033[0;36m')
W=$(${print} '\033[1;37m')
w=$(${print} '\033[0;37m')
END=$(${print} '\033[0m')

# background
RN=$(${print} '\033[6;40m')
Rn=$(${print} '\033[40m')
RR=$(${print} '\033[6;41m')
Rr=$(${print} '\033[41m')
RG=$(${print} '\033[6;42m')
Rg=$(${print} '\033[42m')
RY=$(${print} '\033[6;43m')
Ry=$(${print} '\033[43m')
RB=$(${print} '\033[6;44m')
Rb=$(${print} '\033[44m')
RM=$(${print} '\033[6;45m')
Rm=$(${print} '\033[45m')
RC=$(${print} '\033[6;46m')
Rc=$(${print} '\033[46m')
RW=$(${print} '\033[6;47m')
Rw=$(${print} '\033[47m')

HIGH=$(tput bold)
SMUL=$(tput smul)
RMUL=$(tput rmul)
BLINK=$(tput blink)
REVERSE=$(tput smso)
REVERSO=$(tput rmso)
;;
*)
# text / foreground
n=$(tput setaf 0)
r=$(tput setaf 1)
g=$(tput setaf 2)
y=$(tput setaf 3)
b=$(tput setaf 4)
m=$(tput setaf 5)
c=$(tput setaf 6)
w=$(tput setaf 7)
N=$(tput setaf 8)
R=$(tput setaf 9)
G=$(tput setaf 10)
Y=$(tput setaf 11)
B=$(tput setaf 12)
M=$(tput setaf 13)
C=$(tput setaf 14)
W=$(tput setaf 15)
END=$(tput sgr0)

HIGH=$(tput bold)
SMUL=$(tput smul)
RMUL=$(tput rmul)
BLINK=$(tput blink)
REVERSE=$(tput smso)
REVERSO=$(tput rmso)

# background
Rn=$(tput setab 0)
Rr=$(tput setab 1)
Rg=$(tput setab 2)
Ry=$(tput setab 3)
Rb=$(tput setab 4)
Rm=$(tput setab 5)
Rc=$(tput setab 6)
Rw=$(tput setab 7)
RN=$(tput setab 8)
RR=$(tput setab 9)
RG=$(tput setab 10)
RY=$(tput setab 11)
RB=$(tput setab 12)
RM=$(tput setab 13)
RC=$(tput setab 14)
RW=$(tput setab 15)
;;
esac

BLUEf=${B}
BLUE=${b}
REDf=${R}
RED=${r}
GREENf=${G}
GREEN=${g}
YELLOWf=${Y}
YELLOW=${y}
MANGENTAf=${M}
MANGENTA=${m}
WHITEf=${W}
WHITE=${w}
CYANf=${C}
CYAN=${c}

OK="${RG}${n}OK${END}"
KO="${RR}${n}KO${END}"
NA="${N}NA${END}"

COLORIZE='eval sed -e "s/{END}/${END}/g" -e "s/{HIGH}/${HIGH}/g" -e "s/{SMUL}/${SMUL}/g" -e "s/{RMUL}/${RMUL}/g" -e "s/{BLINK}/${BLINK}/g" -e "s/{REVERSE}/${REVERSE}/g" -e "s/{REVERSO}/${REVERSO}/g"'
LOWS=' -e "s/{n}/${n}/g" -e "s/{r}/${r}/g" -e "s/{g}/${g}/g" -e "s/{y}/${y}/g" -e "s/{b}/${b}/g" -e "s/{m}/${m}/g" -e "s/{c}/${c}/g" -e "s/{w}/${w}/g"'
HIGHS=' -e "s/{N}/${N}/g" -e "s/{R}/${R}/g" -e "s/{G}/${G}/g" -e "s/{Y}/${Y}/g" -e "s/{B}/${B}/g" -e "s/{M}/${M}/g" -e "s/{C}/${C}/g" -e "s/{W}/${W}/g"'
REVLOWS=' -e "s/{Rn}/${Rn}/g" -e "s/{Rr}/${Rr}/g" -e "s/{Rg}/${Rg}/g" -e "s/{Ry}/${Ry}/g" -e "s/{Rb}/${Rb}/g" -e "s/{Rm}/${Rm}/g" -e "s/{Rc}/${Rc}/g" -e "s/{Rw}/${Rw}/g"'
REVHIGHS=' -e "s/{RN}/${RN}/g" -e "s/{RR}/${RR}/g" -e "s/{RG}/${RG}/g" -e "s/{RY}/${RY}/g" -e "s/{RB}/${RB}/g" -e "s/{RM}/${RM}/g" -e "s/{RC}/${RC}/g" -e "s/{RW}/${RW}/g"'
# COLORIZE Usage:
# command |${COLORIZE} ${LOWS} ${HIGHS} ${REVLOWS} ${REVHIGHS}

set +a
}

2. egrepi

и функция egrepi, эффективная и изящная: цвет, циклически повторяющийся между 8 или больше цветами (Ваши потребности) И протестированный под 3 другими Unix ОС, с комментариями:


# egrepi() egrep with 8 REVERSE cyclic colorations on regexps almost like egrep
# egrepi 
# current script will work for KSH88, KSH93, bash 2+, zsh, under AIX / Linux / SunOS
egrepi ()
{
args=$*
# colorList=wBcgymrN                                                # KSH93 or bash 3+, not for AIX
# set -A color                                                  # needed with older sh
color[0]=$Rw; color[1]=$RB; color[2]=$Rc; color[3]=$Rg; color[4]=$Ry; color[5]=$Rm; color[6]=$Rr; color[7]=$RN; # this is the only one AIX solution
i=0
unset argsToGrep argsSedColor argsPerlColor

for arg in ${args}
do
    [ "${arg}" == "." ] && arg=\\.                              # if you wanna grep "."
    # color=R${colorList:((${RANDOM: -1:1})):1}                     # bash RANDOMized colors
    # color=R${colorList:$i:1} && let i++ && ((i==8)) && i=0                # KSH93 or bash 3+, not for AIX
    argsToGrep="${argsToGrep}${argsToGrep:+|}${arg}"
    # argsSedColor="${argsSedColor} -e s#${arg}#$n${!color}&${w}#gI"            # AIX KSH88 do not recognise this fucking variable double expansion
    # argsSedColor="${argsSedColor} -e s#${arg}#$n${color[$i]}&${w}#gI"         # AIX neither do include sed with Ignore case
    argsPerlColor="${argsPerlColor}${argsPerlColor:+,}s#${arg}#$n${color[$i]}$&${END}#gi"   # So: gotta use perl
    let i+=1 && ((i==8)) && i=0                             # AIX KSH88 do not recognise "let i++"
done
# egrep -i "${argsToGrep}" | sed ${argsSedColor} | egrep -v "grep|sed"              # AIX sed incompatibility with Ignore case
# (($# > 0)) && (egrep -i "${argsToGrep}" | perl -p -e ${argsPerlColor}) || cat         # this line colors & grep the words, will NOT act as "tail -f"
(($# > 0)) && (perl -p -e ${argsPerlColor}) || cat                      # this line just colors the words
}

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

управляйте | egrepi word1.. wordN

1
27.01.2020, 19:26

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

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

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

function multigrep(){

    #THIS WORKS - Recreate this, using input parameters
    #sed -En '/(App)|(Spe)/p' ./flashlog.txt;

    filename="/Users/stevewarren/Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt";
    paramString="";

    for element in "$@"
        do
            #echo $element;
            paramString="$paramString($element)|";
        done

    #TRIM FINAL | OFF PARAMSTRING
    paramString=${paramString:0:${#paramString}-1};

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

    #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;
    echo >> ./flashlog_output.txt;
    #cat ./flashlog_output.txt;

    cat ./flashlog_output.txt | while read LINE
    do

        [[  $1 && ${1-x} ]] && 
            if grep -q $1 <<<$LINE; then
                echo "$(tput setaf 3)$LINE"
            fi

        [[  $2 && ${2-x} ]] && 
            if grep -q $2 <<<$LINE; then
                echo "$(tput setaf 7)$LINE"
            fi


        [[  $3 && ${3-x} ]] && 
            if grep -q $3 <<<$LINE; then
                echo "$(tput setaf 6)$LINE"
            fi

    done
}
1
27.01.2020, 19:26

Можно использовать colortail:

colortail -f /var/log/messages
15
27.01.2020, 19:26
  • 1
    +1, доступный в репозиториях Ubuntu. То, что я люблю colortail по сравнению с ccze, - то, что можно настроить свободно использование шаблонов RegEx. Доступные цвета: черный, brightblack, белый, brightwhite, пурпурный, brightmagenta, голубой, brightcyan, зеленый, ‌​ brightgreen, желтый, brightyellow, красный, brightred, синий, brightblue. К сожалению, нет никакого способа выбрать полужирные или другие цвета как оранжевый. –  lepe 27.01.2014, 05:55
  • 2
    я хотел бы исправить одну точку о своем предыдущем комментарии: "яркий" +color включает "полужирный" (некоторые цвета будут на самом деле выглядеть более яркими также), –  lepe 27.01.2014, 06:25

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

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

#!/usr/bin/perl -w

while(<STDIN>) {
    my $line = $_;
    chomp($line);
    for($line){
        s/==>.*<==/\e[1;44m$&\e[0m/gi; #tail multiples files name in blue background
        s/.*exception.*|at .*/\e[0;31m$&\e[0m/gi;  #java errors & stacktraces in red
        s/info.*/\e[1;32m$&\e[0m/gi; #info replacement in green
        s/warning.*/\e[1;33m$&\e[0m/gi; #warning replacement in yellow
    }
    print $line, "\n";
}

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

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

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

6
27.01.2020, 19:26

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

lnav lnav

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

До:

lnav-before-pretty

после:

lnav-pretty

36
27.01.2020, 19:26

Вы также можете посмотреть lwatch :

tail -f / var / log / syslog | lwatch --input -

1
27.01.2020, 19:26

Публикует некоторое время назад утилиту Node Js - log-color-highlight

tail -f file | lch -red error warn -green success
lch -f file -red.bold error warn -underline.bgGreen success
0
27.01.2020, 19:26

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

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

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

Например:

tail -f /var/log/mylogfile | colout '^(\w+ \d+ [\d:]+)|(\w+\.py:\d+ .+\(\)): (.+)$' white,black,cyan bold,bold,normal

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

logfile with colored formatting

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

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

3
27.01.2020, 19:26

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

red=$( tput -Txterm setaf 1 )
norm=$( tput -Txterm sgr0 )
bold=$( tput -Txterm bold )

См. для справки: man tput

Затем:

tail -F myfile.log | sed "s/\(.ERROR.*\)/$red$bold\1$norm/g"
2
20.08.2021, 13:39

grc точно!

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

regexp=.*(select .*)$
colours=unchanged,cyan
=====
regexp=.*(update .*)$
colours=unchanged,bold yellow
=====
regexp=.*(insert .*)$
colours=unchanged,bold yellow
=====
regexp=.*(emp=\d+).*
colours=unchanged,reverse green
=====
regexp=.*http.*/rest/contahub.cmds.(.*?)/(\w*).*$
colours=unchanged,green,magenta
=====
regexp=.*http.*/M/.*\.(.*?Facade)/(\w*).*$
colours=unchanged,underline green,underline magenta

командная строка:

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

результаты: screenshot

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

2
20.08.2021, 13:39

для Centos

yum install -y ccze
tail -f /var/log/file.log | ccze -A
0
20.08.2021, 13:39

Основываясь на @ этом сообщении , я создал решение, которое показывает динамический хвостовой вывод из нескольких файлов журналов и возвращает цветные предупреждения и сообщения об ошибках, как показано ниже:

tail -f -n 5 application.log debug.log| perl -pe 's#WARNING#\x1b[33m$&#; s#ERROR#\x1b[31m$&#; s#foo#\x1b[32m$&#' 

Установка не требуется. Надеюсь, это поможет кому-то.

0
20.08.2021, 13:39

Рабочее решение для Mac

Colored logs on mac

Перепробовал множество вещей, которые просто не работали из-за какой-то проблемы с экранированием.

Наконец-то найдено рабочее решение:

tail -f example.log | sed \
-e "s/FATAL/"$'\e[31m'"&"$'\e[m'"/" \
-e "s/ERROR/"$'\e[31m'"&"$'\e[m'"/" \
-e "s/WARNING/"$'\e[33m'"&"$'\e[m'"/" \
-e "s/INFO/"$'\e[32m'"&"$'\e[m'"/" \
-e "s/DEBUG/"$'\e[34m'"&"$'\e[m'"/"

Быстрый способ показать, как это работает:

echo " [timestamp] production.FATAL Some Message\n" \
"[timestamp] production.ERROR Some Message\n" \
"[timestamp] production.WARNING Some Message\n" \
"[timestamp] production.INFO Some Message\n" \
"[timestamp] production.DEBUG Some Message\n"  | sed \
-e "s/FATAL/"$'\e[31m'"&"$'\e[m'"/" \
-e "s/ERROR/"$'\e[31m'"&"$'\e[m'"/" \
-e "s/WARNING/"$'\e[33m'"&"$'\e[m'"/" \
-e "s/INFO/"$'\e[32m'"&"$'\e[m'"/" \
-e "s/DEBUG/"$'\e[34m'"&"$'\e[m'"/"

Обратите внимание, :это не скроет журналы, просто закрасьте нужные части

0
08.11.2021, 11:31

Теги

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