Ver log de Glassfish con tail | sed

+1
0
-1

Este es otro comando que me tarda en construir así que lo guardo aquí para referencia.

Se trata de ver el log del servidor JavaEE Glassfish (o Sun Java System Application Server) de la misma forma que se ve en Netbeans.

sed es un comando problematico...


#!/bin/bash
#
#tail -f server.log | sed -r 's/regexp/repl/flags' -
#
#el log glassfish tiene lineas como:
#[#|2008-08-14T16:03:16.584-0500|INFO|sun-appserver9.1|com.sun.jbi.framework|_ThreadID=17;_ThreadName=RMI TCP Connection(7)-127.0.0.1;|JBIFW0042: JBI framework termination complete.|#]
#de ella, "JBIFW0042: JBI framework termination complete." es la parte que nos interesa.
#También queremos eliminar líneas en blanco
#
#usaremos dos comandos: tail y sed
#tail muestra las últimas líneas del archivo y muestra nuevas líneas conforme se van agregando.
#sed (stream editor) reemplaza un texto por otro, en esta caso una expresión regular.
#tail PARAMS | sed PARAMS ---"pipe?", la barra vertical (tubo) hace que la salida
# del primer comando (tail) sea entrada "de consola" para el siguiente (sed);
# en otras palabras, sería como si el usuario estuviera tipeando en sed lo que
# sale de tail.
#
#tail:
#tail -f ARCHIVO
# -f (follow) Sigue mostrando más líneas conforme se van agregando al archivo.
# ARCHIVO nombre del archivo a observar (server.log)
#
#sed:
#sed -ru SCRIPT ENTRADA
# -r Usar expresiones regulares extendidas (para poder usar \1 como referencia
# al primer grupo; en el ejemplo: "(.*)" ).
# -u Sin buffer
# SCRIPT serie de órdenes para sed, las encerraremos entre ''
#
#sed SCRIPT:
# {} encierra un grupo de comandos separados por puntos y comas.
# El primero elimina líneas en blanco, y el segundo es una expresión regular
# que extrae el mensaje de las lineas que son al estilo [#|x|x|x|x|mensaje|#]
#
# /^$/d ELIMINAR LINEAS EN BLANCO
# http://student.northpark.edu/pemente/sed/sed1line.txt
# no lo entiendo muy bien pero /^$/ es definitivamente una expresión
# regular que representa una línea vacía.
# "d" es un comando: eliminar
# s/regexp/repl/flags EXTRAER EL TEXTO DEL MENSAJE
# la expresion regular a que se usara es
# ^\[#\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|(.*)\|#\]$
# donde (.*) es el grupo de caracteres que contiene el mensaje
# en el siguiente parametro, usaremos
# \1
# para "sacar" el texto que se ha encontrado y enviarlo a la consola
# despues del ultimo / van banderas, que no usaremos ninguna en este caso.
# ENTRADA Entrada es el #!/bin/bash
#
#tail -f server.log | sed -r 's/regexp/repl/flags' -
#
#el log glassfish tiene lineas como:
#[#|2008-08-14T16:03:16.584-0500|INFO|sun-appserver9.1|com.sun.jbi.framework|_ThreadID=17;_ThreadName=RMI TCP Connection(7)-127.0.0.1;|JBIFW0042: JBI framework termination complete.|#]
#de ella, "JBIFW0042: JBI framework termination complete." es la parte que nos interesa.
#También queremos eliminar líneas en blanco
#
#usaremos dos comandos: tail y sed
#tail muestra las últimas líneas del archivo y muestra nuevas líneas conforme se van agregando.
#sed (stream editor) reemplaza un texto por otro, en esta caso una expresión regular.
#tail PARAMS | sed PARAMS ---"pipe?", la barra vertical (tubo) hace que la salida
# del primer comando (tail) sea entrada "de consola" para el siguiente (sed);
# en otras palabras, sería como si el usuario estuviera tipeando en sed lo que
# sale de tail.
#
#tail:
#tail -f ARCHIVO
# -f (follow) Sigue mostrando más líneas conforme se van agregando al archivo.
# ARCHIVO nombre del archivo a observar (server.log)
#
#sed:
#sed -ru SCRIPT ENTRADA
# -r Usar expresiones regulares extendidas (para poder usar \1 como referencia
# al primer grupo; en el ejemplo: "(.*)" ).
# -u Sin buffer
# SCRIPT serie de órdenes para sed, las encerraremos entre ''
#
#sed SCRIPT:
# {} encierra un grupo de comandos separados por puntos y comas.
# El primero elimina líneas en blanco, y el segundo es una expresión regular
# que extrae el mensaje de las lineas que son al estilo [#|x|x|x|x|mensaje|#]
#
# /^$/d ELIMINAR LINEAS EN BLANCO
# http://student.northpark.edu/pemente/sed/sed1line.txt
# no lo entiendo muy bien pero /^$/ es definitivamente una expresión
# regular que representa una línea vacía.
# "d" es un comando: eliminar
# s/regexp/repl/flags EXTRAER EL TEXTO DEL MENSAJE
# la expresion regular a que se usara es
# ^\[#\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|(.*)\|#\]$
# donde (.*) es el grupo de caracteres que contiene el mensaje
# en el siguiente parametro, usaremos
# \1
# para "sacar" el texto que se ha encontrado y enviarlo a la consola
# despues del ultimo / van banderas, que no usaremos ninguna en este caso.
# ENTRADA Entrada es el stream que se procesará (puede ser un nombre de archivo,
# pero en este caso será "-", que quiere decir, entrada estándar (stdin)
# que, en este caso quiere decir "lo que me salga de tail".
# este último parámetro también se puede omitir,
# ejecuta `man tail` y `man sed` para más información.

#finalmente, el comando es:
#tail -f /home/administrador/.gfdomain/logs/server.log | sed -ru '{/^$/d;s/^\[#\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|(.*)\|#\]$/\1/}' -

#modificacion: para mensajes con varias lineas (como stacktraces).
# /^$/d El primer comando quita lineas en blanco
# s/(.*)\|#\]$/\1/ Elimina el cierre de los mensajes
# s/^(\[#\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|)?(.*)$/\2/
# Elimina la parte inicial de los mensajes.
tail -f -n 20 /home/administrador/.gfdomain/logs/server.log | sed -ru '{/^$/d;s/(.*)\|#\]$/\1/;s/^(\[#\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|)?(.*)$/\2/}' -
stream que se procesará (puede ser un nombre de archivo,
# pero en este caso será "-", que quiere decir, entrada estándar (stdin)
# que, en este caso quiere decir "lo que me salga de tail".
# este último parámetro también se puede omitir,
# ejecuta `man tail` y `man sed` para más información.

#finalmente, el comando es:
#tail -f /home/administrador/.gfdomain/logs/server.log | sed -ru '{/^$/d;s/^\[#\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|(.*)\|#\]$/\1/}' -

#modificacion: para mensajes con varias lineas (como stacktraces).
# /^$/d El primer comando quita lineas en blanco
# s/(.*)\|#\]$/\1/ Elimina el cierre de los mensajes
# s/^(\[#\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|)?(.*)$/\2/
# Elimina la parte inicial de los mensajes.
tail -f -n 20 /home/administrador/.gfdomain/logs/server.log | sed -ru '{/^$/d;s/(.*)\|#\]$/\1/;s/^(\[#\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|[^|]*\|)?(.*)$/\2/}' -