Eu gostaria de poder ajustar a saída de um arquivo de log do servidor que possui mensagens como:
INFO
SEVERE
etc, e se estiver SEVERE
, mostre a linha em vermelho; se for INFO
, em verde. Que tipo de alias posso configurar para um tail
comando que me ajudaria a fazer isso?
command-line
colors
alias
highlighting
tail
Amir Afghani
fonte
fonte
sed
: stackoverflow.com/a/14691971/52074Respostas:
Experimente multitail . Esta é uma generalização de
tail -f
. Você pode assistir a vários arquivos em janelas separadas, destacar linhas com base no conteúdo e muito mais.As cores são configuráveis. Se o esquema de cores padrão não funcionar, escreva seu próprio arquivo de configuração. Por exemplo, ligue
multitail -cS amir_log /path/to/log
com o seguinte~/.multitailrc
:Outra solução, se você estiver em um servidor onde é inconveniente instalar ferramentas não padrão , é combinar
tail -f
com sed ou awk para adicionar sequências de controle de seleção de cores. Isso requertail -f
liberar sua saída padrão sem demora, mesmo quando sua saída padrão é um pipe, não sei se todas as implementações fazem isso.ou com sed
Se seu sed não for GNU sed, substitua
\o033
por um caractere de escape literal e remova--unbuffered
.Outra possibilidade é executar
tail -f
um buffer de shell do Emacs e usar as habilidades de coloração de sintaxe do Emacs.fonte
sed
? (desculpe-me por ser preguiçoso e não descobrir isso por conta própria!) Mas você poderia adicionar umsed
exemplo também.tail -f
comawk
código, se uma cadeia não tem INFO e GRAVE , a string é não ser impressa. Como também posso imprimir as seqüências restantes ? (A seqüência de caracteres não precisa ser colorido); next
antes das chaves de fechamento para pular o processamento adicional e uma nova linha de processamento1 {print}
no final (1
significa sempre).sed --unbuffered -e 's/\(.*FATAL.*\)/\o033[1;31m\1\o033[0;39m/' -e 's/\(.*ERROR.*\)/\o033[31m\1\o033[39m/' -e 's/\(.*WARN.*\)/\o033[33m\1\o033[39m/' -e 's/\(.*INFO.*\)/\o033[32m\1\o033[39m/' -e 's/\(.*DEBUG.*\)/\o033[34m\1\o033[39m/' -e 's/\(.*TRACE.*\)/\o033[30m\1\o033[39m/' -e 's/\(.*[Ee]xception.*\)/\o033[1;39m\1\o033[0;39m/'
grc , o corante genérico é bem legal.
Apenas faça
e aproveitar!
Você também o encontrará no GitHub .
fonte
Você já deu uma olhada no ccze ? Você tem a possibilidade de personalizar as cores padrão de algumas palavras-chave usando a opção
-c
ou diretamente no seu arquivo de configuração. Se sua tela é limpar depois de colorir você deve usar a opção-A
.Editar:
Se você realmente deseja que a linha completa seja colorida em vermelho, tente também o seguinte:
\e[1;31m
vai te dar a cor vermelha. Se você quiser um pouco de amarelo, use\e[1;33m
e para verde\e[1;32m
. O\e[0m
restaura a cor do texto normal.fonte
\007
ao fim do regex, assim:perl -pe 's/(ERROR)/\033[31m$1\033[0m\007/g;'
. Isso funciona de maneira impressionante se você estiver usando o tmux comset -g bell-action any
, nesse caso, se o seu log estiver em outra janela, o nome dessa janela será alertado sempre que o regex encontrar uma correspondência.Dê uma olhada no lnav , o visualizador avançado de arquivos de log.
Também pode imprimir vários formatos.
Antes:
Depois de:
fonte
Você pode usar o arco-íris , que colore linhas com base em expressões regulares:
Ele também vem com configurações predefinidas , por exemplo, para logs do Tomcat:
(aviso: eu sou o autor)
fonte
rainbow
é incrível. Você é o autor? Nesse caso, edite sua resposta com essa atribuição.Você pode usar o colortail :
fonte
apt install colortail
e ele deve funcionar sem editar ~ / .colortail / também.Observe também que, se você quiser apenas procurar um regex correspondente, o GNU grep with
--color
funcionará - basta canalizar suatail
saída por isso.fonte
grep -A9999 -B9999
regex
, ele mostrará todas as linhas, a menos que você tenha 10.000 linhas não correspondentes seguidas. Use algo comoGREP_COLORS="ms=31:sl=33:cx=32" grep -A9999 -B9999 SEVERE
para mostrar a palavraSEVERE
em vermelho, as demais linhas SEVERAS em amarelo e todas as outras linhas (não SEVERAS) (até 9999) em verde.--color=always
para grep em vez de apenas--color
, dependendo da ordem do seu pipe, mas sim, isso funciona (GNU coreutils) 8.27 instalado na minha caixa.Para obter saída colorida de comandos padrão como
grep
, você deve configurá-loalias
em seu.bashrc
quando você grep algo em seu arquivo, você vê algo parecido com isto (mas provavelmente em vermelho):
se quiser usar
tail
oueawk
desejar que a cor sobreviva a um pipe, o alias não será suficiente e você deverá usar o--color=always
parâmetro, por exemplo:Se você deseja que o texto colorido
awk
da história seja um pouco complexo, mas mais poderoso, por exemplo:com cada linha em sua própria cor.
Há muitas outras maneiras de obter texto colorido do shell com outras ferramentas e elas são bem descritas por outros membros.
fonte
Eu gosto bastante de colorex . Simples, mas satisfatório.
fonte
Com base na resposta @uloBasEI, tentei usar
... | perl ... | perl ...
, mas o pipe do Linux fica um pouco louco e é muito lento. Se eu colocar todas as regras em apenas umperl
comando, funcionará bem.Por exemplo, crie um
perl
arquivo colorTail.pl como abaixo:Use-o como:
NOTA: você também pode usá-lo no MobaXTerm ! Basta baixar o
perl
plug-in no site MobaXTerm .fonte
fonte
source-highlight
não é um comando amplamente instalado; portanto, você deve pelo menos fornecer um link para o site do projeto.Uma solução que funciona para colorir todos os tipos de texto, não apenas os arquivos de log, é uma ferramenta Python, ' colout '.
Onde qualquer texto na saída de 'myprocess' que corresponda ao grupo 1 da regex será colorido com cor1, grupo 2 com cor2, etc.
Por exemplo:
ou seja, o primeiro grupo regex (parens) corresponde à data inicial no arquivo de log, o segundo grupo corresponde a um nome de arquivo python, número de linha e nome de função, e o terceiro grupo corresponde à mensagem de log que vem depois disso. Isto parece com:
Observe que linhas ou partes de linhas que não correspondem a nenhuma da minha regex ainda são ecoadas, portanto, isso não é como 'grep --color' - nada é filtrado para fora da saída.
Obviamente, isso é flexível o suficiente para que você possa usá-lo com qualquer processo, e não apenas com arquivos de log finais. Normalmente, eu apenas preparo um novo regex rapidamente, sempre que quiser colorir alguma coisa. Por esse motivo, prefiro o colout a qualquer ferramenta personalizada para colorir arquivos de log, porque só preciso aprender uma ferramenta, independentemente do que estiver colorindo: registro, saída de teste, sintaxe destacando trechos de código no terminal etc.
fonte
Plugue sem vergonha: escrevi uma ferramenta chamada TxtStyle que faz algo semelhante às opções mencionadas anteriormente. Você pode executá-lo da seguinte maneira:
Você também pode definir estilos nomeados no arquivo de configuração (
~/.txts.conf
) e usá-lo da seguinte maneira:(o
ifconfig
estilo é definido imediatamente)fonte
grc com certeza!
personalize seus collors com regex no arquivo: ~ .grc / conf.tail (ou qualquer nome que você quiser)
linha de comando:
resultados:
informações para configurar o grc: https://github.com/manjuraj/config/blob/master/.grc/sample.conf
fonte
Eu escrevi uma função bash que aceita até três parâmetros e cria um filtro do tipo grep em um arquivo de texto e envia o texto para a tela em cores.
Eu também gostaria de ver uma função de cauda que faria isso, mas ainda não a encontrei.
Essa função também pode ser aprimorada - eu apreciaria qualquer ajuda sobre como torná-la melhor.
fonte
certo !
Escrevi há muito tempo uma função chamada "egrepi", com base nas definições de 8 variáveis de cores. Isso funciona somente como uma função colorida "tail -f".
1. setColors
primeiro, as variáveis de cores funcionam para serem chamadas inicialmente:
2. egrepi
e a função egrepi, eficaz e elegante: alternando cores entre 8 ou mais cores (suas necessidades) E testado em 3 sistemas operacionais unix diferentes, com comentários:
3. Uso
comando | egrepi word1 .. wordN
fonte
Você também pode dar uma olhada no lwatch :
tail -f /var/log/syslog | lwatch --input -
fonte
Quanto aos códigos de cores, eu usaria tput:
Veja para referência:
man tput
Então:
fonte
Publicado há algum tempo Utilitário Node Js - log-color-realce
fonte