
Gostaria de mudar a maneira como exibo um arquivo de log grande (~ 6.000 linhas) usando wim, less ou qualquer outro, para simplificar a verificação do problema.
Gostaria de destacar alguma linha do log com base em um padrão (ou seja error
, , warning
, info
...) e/ou ocultar outras.
Quais ferramentas eu poderia usar? Eu só preciso de um script de shell? É importante que após o processo eu possa ler a saída usando less, vim, ... para realizar operações de busca!
Edit: um pedacinho do log:
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
Responder1
Eu recomendaria um script de shell, baseado na awk
solução de Valentin B.:
$ 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
Para poder visualizar interativamente a saída colorida, eu usaria less
no modo bruto, por exemplo:
colorize mylog.txt | less -R
Responder2
awk
, conforme mencionado em outras respostas, é definitivamente a ferramenta a ser usada primeiro.
Mas não é a única ferramenta, nem de longe.
AL Lambertlogtool
foi projetado especificamente para pós-processamento de arquivos de log e possui um sistema de configuração complexo (e infelizmente mal documentado) que permite atribuir um arquivo cheio de expressões regulares a cada uma das 13 cores.
gato *.log | ferramenta de registro
Ele tem a distinção de entender logs que possuem carimbos de data/hora TAI64N.
Para isso, adicione:
log-color-highlight
colout
ccze
- Istvan Karaszi
colorize
- Radovan Garabík
grc
- observador de registros
- entupir
- Joakim Andersson
colortail
- arco-íris
- lnav
problemas com colorização
Infelizmente, algumas dessas ferramentas fazem a colorização de maneira muito errada. Eles conectam sequências de controle, em vez de usar setaf
/ setab
e assim por diante do terminfo.
Observe também que a colorização é complicada por razões mais sutis e quase nenhum programa de colorização acerta. Para acertar completamente, um colorizador tem que lidar com margens automáticas e o DEC VTquebra de linha pendentemecanismo, que ainda não vi nenhum colorizador fazer. O GNU grep
tem um bug de colorização bastante famoso nesta área, mas este não é um problema limitado ao grep
.
Leitura adicional
Responder3
Após a verificação, você pode gerar texto colorido diretamente no terminal usando awk
. Com o exemplo que você forneceu, você pode criar um arquivo de script awk (por exemplo displayLog.awk
) contendo o seguinte código:
# 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}
Em seguida, abra uma janela de terminal limpa, verifique se a exibição é ilimitada (você pode exibir todas as 6.000 linhas de uma vez) e use-a desta forma:
$ awk -f displayLog.awk log.txt
OUCurtir usuáriojlliagresugerido em sua solução, canalize-o para o modo bruto less
:
$ awk -f displayLog.awk log.txt | less -R
Isso deve resolver o problema! Você pode mexer nas cores e nas linhas que deseja exibir com base no awk
código de exemplo da minha resposta. Mais sobre codificação de coresaqui.
EDITAR
Se você quiser que apenas uma palavra seja colorida em vez de uma linha inteira (por exemplo, você deseja que ERRO esteja apenas em vermelho), faça o seguinte:
$3 == "ERROR" {
$3 = "\033[1;31m"$3"\033[0m"
print
next
}
Responder4
Se você quiser destacar alguma linha do log com base em um padrão (ou seja, erro, aviso, informação...), use o comando abaixo:
grep -rn "pattern" <logfile>
Este comando exibirá todas as linhas completas do arquivo de log que terá o padrão mencionado acima.