Una pequeña ayuda para la terminal

24 Jul 2008

Si te dedicas a programar es muy posible que más de una vez te hayas enfrentado con una aplicación de consola que suelte toneladas de logs. De hecho es muy recomendable que las aplicaciones que estés desarrollando se puedan configurar para chorrear información, en especial si quieres depurarlas después.

Los logs enormes tienen un problema: si son demasiado verbosos (si, esa palabra existe) pueden ser muy incómodos. Pasamos entonces a emplear espacios en blanco, líneas vacías, asteriscos, etc. para marcar lo que creemos que es más importante. Al final, aparte de un montón de trazas complicadas, acabamos teniendo algo feo e inusable.

Si, los archivos de log tienen que ser también usables. Si no, no valen para nada.

La primera recomendación para esto es emplear terminales con colores ANSI. La historia es que hay un estándar que define un conjunto de códigos que no se ven pero que hacen que los bytes de la consola se rendericen con colores, negritas, subrayados. En http://www.termsys.demon.co.uk/vtansi.htm se pueden ver estos códigos. El código ESC el 0x1B y se puede representar fácilmente en lenguajes como Perl o Ruby como \e.

Así pues, asegúrate de tener un .h o algo así que te defina una serie de macros para estos códigos. Por ejemplo, yo uso los colores rojo, azul, verde, etc, así que me defino un módulo así:

module AnsiTerminal
  RESET      = "\e[0m"
  BRIGHT     = "\e[1m"
  UNDERSCORE = "\e[4m"
  BLACK      = "\e[30m"
  RED        = "\e[31m"
  GREEN      = "\e[32m"
  YELLOW     = "\e[33m"
  BLUE       = "\e[34m"
  MAGENTA    = "\e[35m"
  CYAN       = "\e[36m"
  WHITE      = "\e[37m"
end

De esta manera puedo hacer algo tan tonto como:

puts "#{RED}ERROR:#{RESET} la conexión ha fallado"

La perla que quería comentar es la siguiente: http://www.andre-simon.de/doku/ansifilter/ansifilter.html. Es un programa que toma como entrada un texto con códigos ANSI y genera a la salida un documento en RTF, HTML. Así puedes revisar tus logs en un firefox o en tu editor RTF favorito, si es que hay alguno bueno.

En mi caso, por ejemplo, necesito sacar un trocito del log de una aplicación y pegarlo en una transparencia de keynote. Si haces cortapega desde safari hasta keynote te mantiene el formato del texto. Así que con un simple comando de terminal:

jruby test.rb | ansifilter -H -F monaco -e utf-8 > /tmp/kk.html && open -a "safari" file:///tmp/kk.html

este comando ejecuta mi programa (test.rb) en jruby y la salida la filtra por ansifilter para generar un HTML (-H) con letra monaco (-F monaco) y codificación utf-8 (-e utf-8). Lo vuelco en un archivo .html y si todo va bien lo abro con safari (no uso firefox porque no se lleva bien con keynote, pero con openoffice probablemente si)

De esta forma una combinación de teclas en tu editor y te plantas con una web preciosa que contiene un enorme log, cortapegable o lo que necesites.

En fin, no he descubierto la pólvora pero quizá todo esto le sirva a alguien :)

(c) 2010 voiser.es | Creado con WordPress | Tema basado en Barecity