problemas com colorização

problemas com colorização

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 awksoluçã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 lessno 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 Lambertlogtoolfoi 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:

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/ setabe 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 greptem 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 awkcó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.

informação relacionada