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 INFO
en verde ¿Qué tipo de alias puedo configurar para un tail
comando 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/log
con lo siguiente~/.multitailrc
:Otra solución, si está en un servidor donde es inconveniente instalar herramientas no estándar , es combinarlo
tail -f
con sed o awk para agregar secuencias de control de selección de color. Esto requieretail -f
limpiar 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
\o033
por un carácter de escape literal y elimínelo--unbuffered
.Otra posibilidad es ejecutar
tail -f
en 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 unsed
ejemplo también?tail -f
withawk
, 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); next
antes de las llaves de cierre para omitir el procesamiento adicional y una nueva línea de procesamiento1 {print}
al final (1
significa 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
-c
o 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;31m
te dará el color rojo. Si desea un poco de amarillo, use\e[1;33m
y para uso verde\e[1;32m
. El\e[0m
restaura el color normal del texto.fuente
\007
al 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
rainbow
es increíble. ¿Eres el autor? Si es así, edite su respuesta con esa atribución.Puedes usar colortail :
fuente
apt install colortail
y 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
--color
funcionará, simplemente canalice sutail
salida a través de eso.fuente
grep -A9999 -B9999
regex
, 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 SEVERE
mostrar la palabraSEVERE
en rojo, el resto de las líneas SEVERAS en amarillo y todas las demás líneas (no SEVERAS) (hasta 9999) en verde.--color=always
a 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 estoalias
en su.bashrc
cuando grep algo en su archivo verá algo como esto (pero probablemente en rojo):
si quiere usar
tail
oawk
y quiere que el color sobreviva a una tubería, entonces el alias no es suficiente y debe usar el--color=always
parámetro, por ejemplo:Si desea que el texto en color con
awk
la historia sea un poco complejo pero más potente, por ejemplo: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 soloperl
comando, funciona bien.Por ejemplo, cree un
perl
archivo colorTail.pl como se muestra a continuación:Úselo como:
NOTA: ¡también puede usarlo en MobaXTerm ! Simplemente descargue el
perl
complemento del sitio MobaXTerm .fuente
fuente
source-highlight
no 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
ifconfig
estilo 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 tput
Entonces:
fuente
Publicado hace algún tiempo Node Js utility - log-color-highlight
fuente