tag:blogger.com,1999:blog-1481755160576909631.post6877228074225832533..comments2022-03-31T09:49:36.697+02:00Comments on Blog de Julio César Pérez Arques: Cómo crear un logger AOP con Spring2jcesarperezhttp://www.blogger.com/profile/09407010927256988320noreply@blogger.comBlogger4125tag:blogger.com,1999:blog-1481755160576909631.post-5820886367384100942008-11-10T17:35:00.000+01:002008-11-10T17:35:00.000+01:00Ah vale! Ahora te entiendo. Si es cierto que el re...Ah vale! Ahora te entiendo. Si es cierto que el reflection dicen que tiene su coste. No lo he medido, creo que se usa una especie de cache para que no sea tan costoso. Pero seria interesante medirlo. A ver si saco tiempo...<BR/><BR/>Para lo que quieres puedes usar parametros en la declaracion del pointcut. Entonces podrias crear un metodo isDebugEnabled en el aspecto que delegue en el logger y usarlo en la declaracion del pointcut con un &&.<BR/><BR/>Puedes ver ejemplos en el enlace al final del post.jcesarperezhttps://www.blogger.com/profile/09407010927256988320noreply@blogger.comtag:blogger.com,1999:blog-1481755160576909631.post-25461912931591159142008-11-10T13:13:00.000+01:002008-11-10T13:13:00.000+01:00Sí, a lo que me refiero es que, si bien la ejecuci...Sí, a lo que me refiero es que, si bien la ejecución del logging puede <A HREF="http://commons.apache.org/logging/guide.html#Code%20Guards" REL="nofollow">controlarse según el nivel de log configurado</A>, Spring siempre va a invocar los métodos <I>before</I> y <I>after</I>, independientemente de dicho nivel. Esos métodos son los que hacen uso de Reflection, que es un API algo costoso.<BR/>¿Se podría configurar el AOP de Spring para que, al igual que sólo funciona con los métodos de paquetes <I>example.services.*</I>, sólo se invocasen en el caso de que el nivel de log4j fuera debug? Eso sería interesante.<BR/><BR/>El ejemplo es muy bueno, sobre todo para casos como el que comentas, donde puedes volcar toda la comunicación al log, cosa que es bastante útil.<BR/><BR/>Gracias otra vez.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-1481755160576909631.post-90616647822425042232008-11-10T12:50:00.000+01:002008-11-10T12:50:00.000+01:00Hola Javier.Gracias a ti por tu interés y tu comen...Hola Javier.<BR/><BR/>Gracias a ti por tu interés y tu comentario.<BR/><BR/>No entiendo lo de: <I>las guardas de código (logger.isDebugEnabled) no se pueden aplicar a la propia llamada al before y al after</I>.<BR/>¿Quieres decir que los mensajes de log (logger.debug(o.construyeMsg()))son construidos igualmente uses o no el <I>isDebugEnabled</I>?<BR/>Si estas en lo cierto, si que podria llegar a ser una grave penalizacion ya no solo en tiempo de ejecucion, sino en consumo de memoria!<BR/><BR/>Comparto tu opinion que si bien el ejemplo de log es un ejemplo muy inmediado y facil de ver, no es el mejor ejemplo practico. Yo lo uso para capas especificas como la de services o dao o las llamadas a los Stubs de webservices para imprimir las peticiones y respuestas. Para otras cosas sigo haciendo log 'a mano'.jcesarperezhttps://www.blogger.com/profile/09407010927256988320noreply@blogger.comtag:blogger.com,1999:blog-1481755160576909631.post-91495680166509821892008-11-10T11:55:00.000+01:002008-11-10T11:55:00.000+01:00Muchas gracias, llevaba queriendo probar esto desd...Muchas gracias, llevaba queriendo probar esto desde hace tiempo.<BR/><BR/>¿Sabes si supone una penalización sensible al rendimiento, ya que usa Reflection y las guardas de código <I>(logger.isDebugEnabled)</I> no se pueden aplicar a la propia llamada al <I>before</I> y al <I>after</I>?<BR/><BR/>Por otra parte, quizás sea complicado llegar a tomar el log totalmente como un aspecto, pues casi siempre habrá llamadas muy ligadas al código interno del método. Sin embargo, con tu solución ya nos ahorramos código que no tiene ningún significado en el negocio.<BR/><BR/>Enhorabuena por el blog.Anonymousnoreply@blogger.com