2012-05-07 15 views

Respuesta

88

significa que debe usar marco de registro como o y en lugar de excepciones Impresión directa:

e.printStackTrace(); 

se les debe iniciar sesión utilizando la API esta marcos:

log.error("Ops!", e); 

marcos de registro le dan mucha flexibilidad, por ejemplo puede elegir si desea iniciar sesión en la consola o archivo, o tal vez omitir algunos mensajes si considera que ya no son relevantes en algún entorno.

31

Si llama al printStackTrace() con una excepción, el rastreo se escribe en System.err y es difícil enrutarlo a otra parte (o filtrarlo). En lugar de hacer esto, se le aconseja usar un marco de trabajo de registro (o un marco alrededor de múltiples marcos de registro, como Apache Commons Logging) y registrar la excepción usando ese marco (por ejemplo, logger.error("some exception message", e)).

Hacer eso le permite:

  • escribir la declaración de registro en diferentes lugares a la vez, por ejemplo, la consola y un archivo
  • filtrar las instrucciones de registro por gravedad (error, advertencia, información, depuración, etc.) y origen (normalmente basado en paquete o clase)
  • influyen en el formato de registro sin tener que cambiar el código
  • etc. programa de calidad
+0

Acabo de decir gracias aquí por valiosos comentarios en otro lugar ;-) – GhostCat

14

una producción debe utilizar una de las muchas alternativas de registro (por ejemplo, log4j, logback, java.util.logging) para informar errores y otros diagnósticos. Esto tiene una serie de ventajas:

  • Los mensajes de registro van a una ubicación configurable.
  • El usuario final no ve los mensajes a menos que configure el registro para que lo haga.
  • Puede usar diferentes registradores y niveles de registro, etc. para controlar la cantidad de registro que se registra.
  • Puede usar diferentes formatos de anexos para controlar cómo se ve el registro.
  • Puede conectar fácilmente la salida de registro en un marco de supervisión/registro más grande.
  • Todo lo anterior se puede hacer sin cambiar su código; es decir, editando el archivo de configuración de registro de la aplicación implementada.

Por el contrario, si solo usa printStackTrace, el usuario final o implementador tiene poco o ningún control, y los mensajes de registro pueden perderse o mostrarse al usuario final en circunstancias inapropiadas.(Y nada aterroriza a un usuario tímido más que un seguimiento de pila aleatorio).

1

Casi todos los marcos de registro proporcionan un método por el cual podemos pasar el objeto arrojado junto con un mensaje. Me gusta:

public trace(Marker marker, String msg, Throwable t); 

Imprimen la pila de objetos arrojables.

3

En Simple, e.printStackTrace() no es una buena práctica, ya que simplemente imprime el seguimiento de la pila en un error estándar. Debido a esto, no puedes controlar a dónde va esta salida.

Cuestiones relacionadas