Manejo de Log

La herramienta para los logs utilizada por los proyectos Core5 es LOG4J. Al acoplar el modulo de seguridad de Core5 a un proyecto, se crea en el proyecto un archivo log4j.xml el cual sirve para configurar las políticas del log. La configuración predefinida crea un archivo con extensión .log, donde quedan todos los mensajes de tipo INFO. Este archivo se ubica en la carpeta log del servidor.

Ruta carpeta log para jboss: jboss-A.S\server\default\log
Ruta carpeta log para Weblogic: bea\user_projects\domains\nombreDominio\logs
Ruta carpeta log para Websphere: IBM\WebSphere\AppServer\profiles\AppSrv01\logs
Nota: estas rutas pueden cambiar según su configuración personal.
El contenido del archivo tendrá el siguiente formato por cada log:

Como políticas recomendadas para los proyectos se tienen las siguientes:

  • Cuando se trata de un componente SEAM se debe inyectar el logger de la siguiente forma: @Logger private Log log; El tipo del objeto log debe ser org.jboss.seam.log.Log
  • Dejar log de nivel INFO al inicio y final de cada método de negocio. Se debe definir un estándar para este tipo de mensajes, por ejemplo:
public void metodo() {
   log.info("metodo()::iniciado");

   //logica de negocio

   log.info("metodo()::terminado");
}
  • Dejar log de nivel ERROR cuando se captura una excepción. En este caso es necesario dejar en el log suficiente información para identificar la causa del error. Se debe definir un estandar, por ejemplo:
try {

   //logica de negocio

} catch (Exception e) {
   AppRollbackException ae = new AppRollbackException("error1", new String[] {"param1"}, e);
   log.error(ae.getMessage(), e);
   throw ae;
}
  • Se puede dejar log de nivel DEBUG en cualquier otra parte del código. Cuando el mensaje que se registra implica resolver parametros que pueden afectar el desempeño es necesario anteponer un if que verifique si el log esta configurado con el nivel DEBUG habilitado. De esta forma si el nivel DEBUG no está habilitado, no se entra al if y no se incurre en el costo de resolver los parametros del mensaje. Por ejemplo en el siguiente bloque de código para dejar un mensaje en el log se recorre una colección de objetos, para agregar el nombre de estos objetos al mensaje.
if (log.isDebugEnabled()) {
   StringBuilder msg =  new StringBuilder();
   msg.append("Se actualizo el usuario ");
   msg.append(user.getName());
   msg.append(" con sus perfiles: ");

   for (UserProfile up : user.getUserProfiles()) {
      msg.append(up.getProfile().getName());
   }

    log.debug(msg.toString());
}
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License