problemas con la coloración

problemas con la coloración

Me gustaría cambiar la forma en que visualizo un archivo de registro grande (~6000 líneas) usando wim, less o lo que sea, para simplificar la verificación del problema.

Me gustaría resaltar alguna línea del registro basándose en un patrón (es decir error, warning, info...) y/u ocultar algunas otras.

¿Qué herramientas podría utilizar? ¿Solo necesito un script de shell? ¡Es importante que después del proceso pueda leer el resultado usando less, vim, ... para realizar operaciones de búsqueda!

Editar: un pedacito del registro:

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

Respuesta1

Recomendaría un script de shell, basado en awkuna solución similar a la 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 ver interactivamente la salida coloreada, usaría lessen modo sin formato, por ejemplo:

colorize mylog.txt | less -R

Respuesta2

awk, como se menciona en otras respuestas, es definitivamente la herramienta a la que recurrir primero.

Pero no es la única herramienta, ni mucho menos.

AL Lambertlogtoolestá diseñado específicamente para el posprocesamiento de archivos de registro y tiene un sistema de configuración complejo (y lamentablemente mal documentado) que permite asignar un archivo lleno de expresiones regulares a cada uno de los 13 colores.

gato *.log | herramienta de registro

Tiene la distinción de comprender registros que tienen marcas de tiempo TAI64N.

A eso, agregue:

problemas con la coloración

Por desgracia, algunas de estas herramientas colorean muy mal. Ellos cablean secuencias de control, en lugar de usar setaf/ setaby demás desde terminfo.

También tenga en cuenta que colorear es complicado por razones más sutiles y casi ningún programa de coloración lo hace bien. Para hacerlo completamente bien, un colorizador tiene que lidiar con márgenes automáticos y el DEC VT.ajuste de línea pendientemecanismo, que todavía no he visto hacer ningún colorante. GNU greptiene un error de coloración bastante famoso en esta área, pero no es un problema que se limite a grep.

Otras lecturas

Respuesta3

Después de verificar, puede generar texto en color directamente en la terminal usando awk. Con el ejemplo que proporcionó, puede crear un archivo de script awk (p. ej. displayLog.awk) que contenga el siguiente 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}

Luego abra una ventana de terminal limpia, verifique que la visualización sea ilimitada (puede mostrar las 6000 líneas a la vez) y utilícela de esta manera:

$ awk -f displayLog.awk log.txt

OMe gusta usuariojlliagresugerido en su solución, canalícelo al modo sin formato less:

$ awk -f displayLog.awk log.txt | less -R

Eso debería hacer el truco ! Puede jugar con los colores y las líneas que desea mostrar según el awkcódigo de muestra de mi respuesta. Más sobre codificación de coloresaquí.

EDITAR

Si desea que solo se coloree una palabra en lugar de una línea completa (por ejemplo, desea que ERROR esté solo en rojo), haga esto:

$3 == "ERROR" {
    $3 = "\033[1;31m"$3"\033[0m"
    print
    next
}

Respuesta4

Si desea resaltar alguna línea del registro según un patrón (es decir, error, advertencia, información...), utilice el siguiente comando:

grep -rn "pattern" <logfile>

Este comando mostrará todas las líneas completas del archivo de registro que tendrán el patrón mencionado anteriormente.

información relacionada