2009-08-11 21 views
13

Estoy en el proceso de migrar el registro de una aplicación de tamaño mediano de una solución personalizada a algo más estándar. Decidí usar Logback y SLF4J, y he migrado con éxito la mayor parte del código de Java. Sin embargo, tengo bastante JSPs que simplemente usan System.out para el registro. Nunca he trabajado demasiado con JSP, y comencé a preguntarme: ¿cómo se supone que debo usar el registro adecuado en un JSP?Cómo utilizar los registradores SLF4J en un JSP

<%@page import="org.slf4j.Logger"%> 
<%@page import="org.slf4j.LoggerFactory"%> 
<% 
    Logger log = LoggerFactory.getLogger(getClass()); 
%> 
<!-- ... --> 
<% 
    log.info("Hello Logging!"); 
%> 

Esto es lo que vino a la mente en primer lugar, pero parece equivocado en varios puntos:

  • demasiado prolijas, y necesita mucho trabajo para convertir las páginas JSP existentes
  • hay una llamada hecho a LoggerFactory.getLogger() cada vez que se representa la página (a diferencia de un campo estático logger en una clase Java estándar)
  • Creo que el nombre del registrador también va a ser algo no muy sencillo de esta manera

¿Hay algún tipo de estándar, o una mejor práctica, o algo para iniciar sesión en los JSP?

También, IIRC, había algún tipo de taglib para Log4J. ¿Hay algo similar para SLF4J (o quizás Logback)?

Respuesta

9

Eche un vistazo a slf4j-taglib.

+2

Por lo que puedo ver, slf4j-taglib no ha llegado a maven central. Solo un fyi para cualquiera que pueda ser un problema. –

+0

¡No está allí todavía! –

0
public enum MyLoggerFactory { 

    INSTANCE; 

    @SuppressWarnings("unchecked") 
    private final Map<Class, Logger> loggers = new HashMap<Class, Logger>(); 

    @SuppressWarnings("unchecked") 
    public Logger getLogger(Class clazz) { 
     if (loggers.get(clazz) == null) { 
      loggers.put(clazz, LoggerFactory.getLogger(clazz)); 
     } 
     return loggers.get(clazz); 
    } 
} 

Entonces su página JSP podría parecerse a:

<% 
    MyLoggerFactory.INSTANCE.getLogger(getClass()).info("Hello Logging!"); 
%> 
+0

No creo que esto es cualquier mejor. De esta manera tendría que llamar a getLogger() cada vez que quisiera registrar algo, hay problemas de seguridad de subprocesos, y esto es incluso más detallado que la solución original. –

+1

Puede emplear las técnicas de Programación Orientada a Aspectos para envolver las llamadas al método Java que realizan sus bibliotecas de etiquetas y registrarlas antes y después de cada ejecución. De todos modos, JSP no es un lugar para la lógica de negocios.Debe estar en el controlador JAVA y en las piezas del modelo. –

5

Usted podría intentar (Tenga en cuenta el "!")

<%! org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger("JSPname"); %> 

Luego reemplazar su System.out de la

<% log.info("Hello Logging!"); %> 

El comentario de Boris realmente debería ser tomado en para su concideración, las JSP no deberían necesitar el registro en general. Solo usaría esta técnica (o algo similar) para reemplazar el registro existente que debía mantenerse.

-1

Creo que es una mala práctica activar el registro desde la capa representacional de una aplicación. En general, esperaría encontrar el inicio de sesión solo en la lógica de negocios: un JSP desordenado con la invocación de registros ciertamente rompería el principio de separación de preocupaciones.

Como una solución provisional pero elegante, puede intentar crear una etiqueta personalizada lib.

0

Para utilizar registrador en el archivo JSP, inicializar el objeto registrador de la siguiente manera:

<% Logger logger = LoggerFactory.getLogger(this.getClass()); %> 

Y entonces usted puede seguir adelante mediante el uso de

logger.info(); or logger.error();, etc. 
Cuestiones relacionadas