2012-09-23 38 views
8

¿Cómo puedo setDebug(true) en una sesión JavaMail pero capturar la secuencia y usarla en mi marco de registro? (Si no se descarga el código fuente, se cambia el método para aceptar una secuencia como parámetro, se vuelve a compilar, ...)JavaMail setDebug (verdadero)

De manera más general, ¿existe una forma estándar en Java de "secuestrar y redirigir" la salida de flujo genérica? de esta manera? Tenga en cuenta que System.out puede estar ya contaminado con otra salida y no tengo idea de cómo "filtrar" eso ...

Respuesta

9

Puede vincular un PrintStream a un ByteArrayOutputStream, decirle a JavaMail que use su PrintStream, haga el JavaMail y finalmente, descargue el contenido de ByteArrayOutputStream a su registrador favorito.

 ByteArrayOutputStream os = new ByteArrayOutputStream(); 
     PrintStream ps = new PrintStream(os); 
     Session mailSession = Session.getDefaultInstance(props, null); 
     try { 
      if (MAIL_DEBUG) { 
       logger.info("JAVAMAIL debug mode is ON"); 
       mailSession.setDebugOut(ps); 
       mailSession.setDebug(true); 
      } 
      ... 
      transport.close(); 
      if (MAIL_DEBUG) { 
       logger.info(os); 
      } 
     } 
      finally { 
      ps.close(); 
      os.close(); 
     } 
Cuestiones relacionadas