Me gustaría poder adaptar la salida de un archivo de registro del servidor que tiene mensajes como:
INFO
SEVERE
etc., y si es así SEVERE, muestre la línea en rojo; si es INFOen verde ¿Qué tipo de alias puedo configurar para un tailcomando que me ayudaría a hacer esto?
command-line
colors
alias
highlighting
tail
Amir Afghani
fuente
fuente

sed: stackoverflow.com/a/14691971/52074Respuestas:
Prueba multitail . Esta es una übergeneralización de
tail -f. Puede ver varios archivos en ventanas separadas, resaltar líneas en función de su contenido y más.Los colores son configurables. Si el esquema de color predeterminado no funciona para usted, escriba el suyo en el archivo de configuración. Por ejemplo, llame
multitail -cS amir_log /path/to/logcon lo siguiente~/.multitailrc:Otra solución, si está en un servidor donde es inconveniente instalar herramientas no estándar , es combinarlo
tail -fcon sed o awk para agregar secuencias de control de selección de color. Esto requieretail -flimpiar su salida estándar sin demora, incluso cuando su salida estándar es una tubería, no sé si todas las implementaciones hacen esto.o con sed
Si su sed no es GNU sed, reemplácelo
\o033por un carácter de escape literal y elimínelo--unbuffered.Otra posibilidad es ejecutar
tail -fen un búfer de shell Emacs y usar las habilidades de coloración de sintaxis de Emacs.fuente
sed? (lo siento por ser flojo y no resolverlo yo mismo!) Pero, ¿podría agregar unsedejemplo también?tail -fwithawk, si una cadena no tiene INFO y SEVERE , la cadena no se imprimirá. ¿Cómo puedo imprimir las permanecer cadenas tampoco? (La cuerda no necesita ser coloreada); nextantes de las llaves de cierre para omitir el procesamiento adicional y una nueva línea de procesamiento1 {print}al final (1significa siempre).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 , el colorante genérico es genial.
Solo haz
¡y disfrutar!
También lo encontrarás en GitHub .
fuente
¿Has echado un vistazo a ccze ? Tiene la posibilidad de personalizar los colores predeterminados de algunas palabras clave utilizando la opción
-co directamente en su archivo de configuración. Si su pantalla se está limpiando después de colorear, debe usar la opción-A.Editar:
Si realmente desea que la línea completa se coloree en rojo, también puede probar lo siguiente:
\e[1;31mte dará el color rojo. Si desea un poco de amarillo, use\e[1;33my para uso verde\e[1;32m. El\e[0mrestaura el color normal del texto.fuente
\007al final de la expresión regular, así:perl -pe 's/(ERROR)/\033[31m$1\033[0m\007/g;'. Esto funciona de maravilla si está utilizando tmux conset -g bell-action any, en cuyo caso si su registro sigue en otra ventana, el nombre de esa ventana alertará cada vez que la expresión regular encuentre una coincidencia.Eche un vistazo a lnav , el visor avanzado de archivos de registro.
También puede imprimir varios formatos.
Antes de:
Después:
fuente
Puede usar el arco iris , que colorea líneas basadas en expresiones regulares:
También viene incluido con configuraciones predefinidas , por ejemplo para los registros de Tomcat:
(descargo de responsabilidad: yo soy el autor)
fuente
rainbowes increíble. ¿Eres el autor? Si es así, edite su respuesta con esa atribución.Puedes usar colortail :
fuente
apt install colortaily debería funcionar sin editar ~ / .colortail / también.También tenga en cuenta que si solo desea buscar una expresión regular coincidente, GNU grep
--colorfuncionará, simplemente canalice sutailsalida a través de eso.fuente
grep -A9999 -B9999regex, mostrará todas las líneas a menos que tenga 10,000 líneas no coincidentes en una fila. Use algo comoGREP_COLORS="ms=31:sl=33:cx=32" grep -A9999 -B9999 SEVEREmostrar la palabraSEVEREen rojo, el resto de las líneas SEVERAS en amarillo y todas las demás líneas (no SEVERAS) (hasta 9999) en verde.--color=alwaysa grep en lugar de solo--color, dependiendo del orden de su tubería, pero sí, esto funciona a la cola (GNU coreutils) 8.27 instalado en mi caja.Para obtener resultados coloreados de comandos estándar como
grep, debe configurar estoaliasen su.bashrccuando grep algo en su archivo verá algo como esto (pero probablemente en rojo):
si quiere usar
tailoawky quiere que el color sobreviva a una tubería, entonces el alias no es suficiente y debe usar el--color=alwaysparámetro, por ejemplo:[root @ linubox mydir] # grep --color = siempre "\ (INFO \ | SEVERE \)" / var / log / logname | cola -f | awk '{print $ 1}' esta GRAVE esta esta GRAVESi desea que el texto en color con
awkla historia sea un poco complejo pero más potente, por ejemplo:[root @ linubox mydir] # tail -f / var / log / messages | awk '{if ($ 5 ~ / INFO /) print "\ 033 [1; 32m" $ 0 "\ 033 [0m"; de lo contrario, si ($ 1 ~ / SEVERE /) imprime "\ 033 [1; 31m" $ 0 "\ 033 [0m"; sino imprimir $ 0} ' esta entrada es una INFORMACIÓN GRAVE ¡esta entrada es una advertencia! esta es otra ENTRADA esta entrada es una INFO esta es otra ENTRADA esta entrada es una INFORMACIÓN GRAVE ¡esta entrada es una advertencia!con cada línea en su propio color.
Hay muchas otras formas de obtener texto coloreado del shell con otras herramientas y otros miembros los describen bien.
fuente
Me gusta bastante el colorex . Simple, pero satisfactorio.
fuente
Basado en la respuesta de @uloBasEI, intenté usarlo
... | perl ... | perl ..., pero Linux pipe se vuelve un poco loco y es demasiado lento. Si pongo todas las reglas en un soloperlcomando, funciona bien.Por ejemplo, cree un
perlarchivo colorTail.pl como se muestra a continuación:Úselo como:
NOTA: ¡también puede usarlo en MobaXTerm ! Simplemente descargue el
perlcomplemento del sitio MobaXTerm .fuente
fuente
source-highlightno es un comando ampliamente instalado, por lo que al menos debería dar un enlace al sitio del proyecto.Una solución que funciona para colorear todo tipo de texto, no solo archivos de registro, es una herramienta de Python, ' colout '.
Donde cualquier texto en la salida de 'myprocess' que coincida con el grupo 1 de la expresión regular se coloreará con color1, grupo 2 con color2, etc.
Por ejemplo:
es decir, el primer grupo de expresiones regulares (parens) coincide con la fecha inicial en el archivo de registro, el segundo grupo coincide con un nombre de archivo de Python, número de línea y nombre de función, y el tercer grupo coincide con el mensaje de registro que viene después de eso. Esto se ve así:
Tenga en cuenta que las líneas o partes de líneas que no coinciden con ninguna de mis expresiones regulares todavía tienen eco, por lo que esto no es como 'grep --color': nada se filtra de la salida.
Obviamente, esto es lo suficientemente flexible como para que pueda usarlo con cualquier proceso, no solo siguiendo archivos de registro. Por lo general, solo preparo una nueva expresión regular sobre la marcha cada vez que quiero colorear algo. Por esta razón, prefiero colout a cualquier herramienta personalizada para colorear archivos de registro, porque solo necesito aprender una herramienta, independientemente de lo que esté coloreando: registro, salida de prueba, fragmentos de código de resaltado de sintaxis en el terminal, etc.
fuente
Plug descarado: escribí una herramienta llamada TxtStyle que hace algo similar a las opciones mencionadas anteriormente. Puede ejecutarlo de la siguiente manera:
También puede definir estilos con nombre en el archivo de configuración (
~/.txts.conf) y usarlo así:(el
ifconfigestilo se define fuera de la caja)fuente
grc seguro!
Personalice sus collors con expresiones regulares en el archivo: ~ .grc / conf.tail (o el nombre que desee)
línea de comando:
resultados:
información para configurar grc: https://github.com/manjuraj/config/blob/master/.grc/sample.conf
fuente
Escribí una función bash que acepta hasta tres parámetros y hace un filtro grep en un archivo de texto, y envía el texto a la pantalla en color.
También me gustaría ver una función de cola que haga esto, pero aún no he encontrado una.
Esta función también se puede mejorar: agradecería cualquier ayuda sobre cómo mejorarla.
fuente
seguro !
Escribí durante mucho tiempo una función llamada "egrepi", basada en las 8 definiciones de variables de color. Esto funciona ÚNICAMENTE canalizado como una función coloreada "tail -f".
1. setColors
primero, las variables de color funcionan al principio:
2. egrepi
y la función egrepi, efectiva y elegante: ciclo de color entre 8 o más colores (sus necesidades) Y probado en 3 sistemas operativos Unix diferentes, con comentarios:
3. Uso
comando | egrepi word1 .. wordN
fuente
También es posible que desee echar un vistazo a lwatch :
tail -f /var/log/syslog | lwatch --input -fuente
En cuanto a los códigos de color, usaría tput:
Ver para referencia:
man tputEntonces:
fuente
Publicado hace algún tiempo Node Js utility - log-color-highlight
fuente