Logging anadido en tiempo de ejecucion

33 views
Skip to first unread message

Jonathan Vila López

unread,
Mar 22, 2013, 7:07:20 PM3/22/13
to barcel...@googlegroups.com
Hola

Tengo una duda de fundamento, y no se si hago una pregunta que carece de sentido.

Resulta que tenemos una aplicacion que en unos casos determinados y en produccion puede dar algunos resultados inesperados, puesto que recibe informacion de otros servicios externos y a veces puede darse la situacion que envien informacion que no cumple con lo "contratado"

Pues bien, para averiguar que pasa el procedimiento que uso ahora es anadir informacion de debug ( log4j ) compilar y subir a produccion..... esto no me gusta en absoluto.

Se me ocurrio que tal vez exista "algo" que permita anadir info de debug en tiempo de ejecucion sin volver a compilar, o parecido....

Sabeis de algo parecido ?

Iker Mtnz. Apellaniz

unread,
Mar 23, 2013, 5:29:26 AM3/23/13
to barcel...@googlegroups.com
Buenas,
 Si esta corriendo en jboss dentro de tu carpeta /sever/***nombre del server normalmente default***/conf/ eberia haber un fichero "jboss-log4j.xml" aqui puedes cambiar el trace level de algunos paquetes on-the-fly. Se que no funciona con todas las configuraciones de log4j, slf4j etcetera, pero echale un ojo porque te puede ser util debugando en prod.

saludos,
  Iker

Jonathan Vila Lopez

unread,
Mar 23, 2013, 9:59:45 AM3/23/13
to barcel...@googlegroups.com

@iker creo que lo que comentas implicaría que ya tuviera codificado el blogging y que simplemente cambiariamos el nivel de log... Eso ya lo hacemos, el problema es que no tenemos lineas de logró en todas partes y por eso recodificamos añadiendo Logger.getLogger(...).debug(....)

--
Has recibido este mensaje porque estás suscrito al grupo "Barcelona JUG" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus correos electrónicos, envía un correo electrónico a barcelona-ju...@googlegroups.com.
Para obtener más opciones, visita https://groups.google.com/groups/opt_out.
 
 

Iker Mtnz. Apellaniz

unread,
Mar 24, 2013, 7:13:11 AM3/24/13
to barcel...@googlegroups.com
Bueno, La idea es deja los logs puestos a nivel debug, y cambia el trace level a medida que necesitas medir tiempos, trazabilidad o simplemente lo que retorna una funcion.

Jonathan Vila Lopez

unread,
Mar 24, 2013, 8:37:19 AM3/24/13
to barcel...@googlegroups.com
Hola

Si, tienes razon........

El problema es que si no lo hago con AspectJ la verdad que todo el codigo queda muy enmarronado, con muchisimas lineas de log POR SI ACASO, que si todo va bien no las necesitare nunca.......

Era por eso que preguntaba si habia alguna herramienta para "introducir" debug en tiempo de ejecucion


2013/3/24 Iker Mtnz. Apellaniz <mitx...@gmail.com>

Toni Tassani

unread,
Mar 24, 2013, 9:40:14 AM3/24/13
to barcel...@googlegroups.com
No pienses en "por si acasos" sino en "diseñar para ayudar a los de operaciones". En mi opinion es mejor decidir donde quieres el logging, que quieres que registre y en qué nivel de logging en el propio codigo.
Aunque AOP pueda ayudarte, no existe la magia.
---

From: Jonathan Vila Lopez <jonath...@gmail.com>
Date: Sun, 24 Mar 2013 13:37:19 +0100
Subject: Re: { Barcelona JUG } Re: Logging anadido en tiempo de ejecucion

Jonathan Vila Lopez

unread,
Mar 24, 2013, 11:27:13 AM3/24/13
to barcel...@googlegroups.com
Bueno, es que si tengo que hacer log de casi todas las lineas por si acaso el tema falla , por ejemplo porque el formato de la fecha no es el esperado, o porque uno de los 50 atributos viene null..... tendre un codigo exageradamente impresionante y no quiero tener tantas lineas de debug, por si algun dia necesito ver que valor tenia el atributo al pasar por ahi.........

Pensaba en algo menos invasivo y que pueda hacerse desde fuera del proyecto.......no se si me estoy montando un peliculon de antena3......


2013/3/24 Toni Tassani <atas...@gmail.com>

Iker Mtnz. Apellaniz

unread,
Mar 25, 2013, 6:41:01 AM3/25/13
to barcel...@googlegroups.com
Si quieres hacerlo en produccion directamente te diria que lo mejor es, como dice Toni, dejar los logs en puntos criticos de al funcion donde no "molesten" y aporten el máximo de informacion. Por ejemplo, una liena la final y al principio de un loop, o con un "count % 1000" para ver el progreso puede ser muy util para ver temas de performance. Y en el caso de fechas o variables el hecho de escribirlo así te puede ayudar a ver como mejorar el uso de las mismas. Para objetos compuestos por varias propiedades, hacer un overwrite del toString que saque por pantalla los cuatro datos prioritarios puede salvarte de más de un marron, etcetera.

Si estas en devel y quieres mayor velocidad de desarrollo igual te conviene pensar en algun framework agile como play, o alguna herramienta como JRebel donde puedas debuggar.

Ya dirás si te hemos ayudado

Aprovecho para pasaros este video 

Jonathan Vila Lopez

unread,
Mar 25, 2013, 7:07:05 AM3/25/13
to barcel...@googlegroups.com
Hola

La verdad es que os agradezco mucho vuestros comentarios..........

Entiendo lo que me quereis comentar, pero no es exactamente lo que deseo.

Rehago la pregunta............

Imaginad un software del que no teneis el codigo fuente para recompilarlo, aunque si que lo teneis en papel.... y ahora quereis añadir logging de debug.



2013/3/25 Iker Mtnz. Apellaniz <mitx...@gmail.com>

Pablo Díaz

unread,
Mar 25, 2013, 7:40:56 AM3/25/13
to barcel...@googlegroups.com
Un par de cosillas, si puedes mejor encapsularlo usando una Facade, así te quedara el código limpio, si esta bien codificado que este quizá puedes resolver muy bien la papeleta.

Para temas de eficiencia y no perder rendimiento cuando no quieres el nivel de log a debug, puede ser muy interesante tener 2 facades y usar una o otra en función del nivel de log, o directamente usar siempre el isDebug enabled.

Jonathan Vila Lopez

unread,
Mar 25, 2013, 8:20:45 AM3/25/13
to barcel...@googlegroups.com
Hola

Ya entiendo......lo que pasa es que cualquier cambio a nivel de arquitectura hoy por hoy es inviable, asi que ha de ser algo sin cambiar nada sustancial.....

Busco algo "externo" que permita añadir lineas de debug en un software sin necesidad de recompilarlo


2013/3/25 Pablo Díaz <pad...@gmail.com>

Nacho Cougil Jares

unread,
Mar 25, 2013, 4:18:00 PM3/25/13
to barcel...@googlegroups.com

Buenas!

No me alargaré porque estoy escribiendo desde el móvil pero yo optaría por la solución menos intrusiva para tu proyecto y creo que para ello la mejor opción seria intentar usar AOP porque te permitirá cambiar determinados comportamientos sin tener que recodificar nada (menos aún sin no tienes el código) salvo incluir tus necesidades.

Aquí un buen ejemplo de lo que podrías hacer con Spring AOP:

http://www.sivalabs.in/2011/01/aspect-oriented-programming-using.html

Saludos,

Message has been deleted

Jonathan Vila Lopez

unread,
Mar 25, 2013, 4:36:32 PM3/25/13
to barcel...@googlegroups.com
Hola

Esa era mi idea..... aunque as far as I know, con AOP solo puedo loggear al inicio o fin de los metodos , pero no podria "meterme" a mitad de un metodo , no ?


2013/3/25 Nacho Cougil Jares <ignacio...@gmail.com>

Muy buenas desde (muy) lejos.

Toni Tassani

unread,
Mar 25, 2013, 5:05:50 PM3/25/13
to barcel...@googlegroups.com
En AOP puedes elegir el punto de tu código donde quieres que se ejecute una porción de código (tu advice). Esos puntos son llamado pointcuts (o joint points).
La definición de estos pointcuts es del estilo, "cuando se ejecute el método X", "cuando se ejecute con los parámetros a, b, y c". Entonces puedes añadir código antes de la ejecución, después de la misma, o transformando la ejecución (around advice).
En AspectJ, hasta donde yo sé, no existe nada del estilo "3 líneas después de entrar en el método X". Seguramente podrás tener suficiente nivel de log así. Si necesitas más, es que tienes que meterle mano al código. Te lo está pidiendo.


2013/3/25 Jonathan Vila Lopez <jonath...@gmail.com>



--
Toni Tassani
Blog http://alapamui.blogspot.com/
Twitter @atassani

Jonathan Vila Lopez

unread,
Mar 25, 2013, 5:19:37 PM3/25/13
to barcel...@googlegroups.com

Si, eso lo tengo claro.... Lo mejor seria meterle mano al código. Pero, no habría 'algo' rollo debugger, que desde fuera y con introspeccion pudiera 'insertar' debug ?

Reply all
Reply to author
Forward
0 new messages