2012-09-23 8 views
8

In che modo è possibile eseguire lo setDebug(true) in una sessione JavaMail ma acquisire il flusso e utilizzarlo nel mio framework di registrazione? (A parte scaricare il sorgente, cambiare il metodo per accettare un flusso come parametro, ricompilarlo, ...)JavaMail setDebug (true)

Più in generale, c'è un modo standard in Java per l'output di flusso generico "dirottamento e redirezione" in questo modo? Notare che System.out potrebbe essere già contaminato con altri output e non ho idea di come "filtrare" quello ...

risposta

9

È possibile collegare un PrintStream a un ByteArrayOutputStream, comunicare a JavaMail di utilizzare PrintStream, JavaMail roba e, infine, scaricare il contenuto di ByteArrayOutputStream sul tuo registratore preferito.

 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(); 
     } 
Problemi correlati