logging - joinpoint - Registro tradicional vs registro AOP
spring aop example (4)
Estoy comenzando este nuevo proyecto y estamos superando nuestro enfoque de registro / depuración y quería plantearles la pregunta al resto de ustedes en SO, dado
private final static Logger logger = LoggerFactory.getLogger(getClass());
...
public void doSumething(){
...
if(logger.isDebugEnabled())
logger.debug("...");
}
o
@After("execution(* *.doSomething())")
public void logAfter(JoinPoint jp){
logger.debug("...");
}
¿El enfoque AOP es realmente mejor que usar el enfoque tradicional? ¿O AOP se destaca en un caso de uso particular para el registro / perfilado?
Estoy bastante de acuerdo con el enfoque orientado a aspectos. Se siente bien separar el registro de la lógica. Aunque no estoy seguro de la sobrecarga del rendimiento.
Incluso si decide no ir con AOP, hay mejores formas de hacerlo que esto:
if (logger.isDebugEnabled ())
Eche un vistazo a log4j que le permitirá cambiar los niveles de registro, los diferentes apéndices y un montón de otras cosas.
No creo que estos se deben ver como alternativas mutuamente excluyentes.
Creo que AOP es ideal para el seguimiento (es decir, entrada / salida del método de registro y valores de parámetros).
Todavía uso el registro regular también:
- Para mensajes de información / advertencia / error
- Para los mensajes de depuración durante el desarrollo para ver el valor de ciertas variables o para ver qué ruta / si se usa, etc.
Para el rendimiento, el enfoque AOP tiene un poco más de gastos generales que el tradicional.
Una de las muchas fortalezas de AOP es que le permite separar sus preocupaciones no comerciales de su lógica comercial. También lo ayuda en tareas mundanas como poner una lógica de registro en cada uno de sus métodos o colocar una declaración de captura de prueba en cada método.
Creo que el problema real es que si la sobrecarga del rendimiento (en mi experiencia, que es solo mínima) compensaría en las tareas mundanas que tienes que pasar durante el desarrollo.
Un amigo me dijo antes que es mejor tener una aplicación más lenta que sea fácil de mantener y escalable que tener una aplicación más rápida que te dé una gran cantidad de mantenimiento. La lentitud se puede compensar de muchas maneras, como la actualización de hardware y etc.
Esto es solo mis dos centavos, espero que esto ayude.
Estoy de acuerdo con la respuesta de @daxsorbito, y quería construir sobre eso.
El consejo de corte transversal se puede configurar usando archivos de configuración para que pueda tener un consejo AOP diferente para el registro de producción. Esto puede mejorar el rendimiento.
AOP puede reducir una gran cantidad de desorden de código y alentar a los desarrolladores a centrarse en la tarea principal.
Una gran cantidad de depuración se vuelve más fácil si el código tiene suficiente logging. AOP lo hace independiente de un desarrollador. Algunos desarrolladores pueden no seguir una disciplina de registro lo suficiente. O puede sentir que es innecesario.
El archivo de registro tiene mensajes consistentes. (no más "dices patata, digo batata ... :)") - Cada desarrollador puede registrarlo en un estilo diferente. Sin embargo, si lo hacemos con AOP-fy, puede hacerlo coherente a lo largo de la aplicación y poner una buena cantidad de analítica encima fácilmente.
Esto también lo alienta a escribir pequeños métodos reutilizables (e incluso mejores si estos a veces son comprobables) que pueden ser fácilmente depurados.
A veces, esto también lo alentará a seguir convenciones de nomenclatura consistentes, ya que facilitará la aplicación de consejos para iniciar sesión en esos métodos durante la depuración.