2012-09-23 27 views
8

Bir JavaMail oturumunda nasıl setDebug(true) yapabilirim, ancak akışı yakala ve günlük çerçevemde kullanabilir miyim? (Kaynağın indirilmesinin kısa bir yolu, bir akış olarak parametre kabul etmek için yöntemi değiştirme, onu yeniden derleme, ...)JavaMail setiDebug (true)

Daha genel olarak, Java'da genel akış çıktısını "ele geçirme ve yeniden yönlendirme" için standart bir yol var mı? bu moda da? System.out'un başka bir çıkışla kirlenmiş olabileceğini ve bunun "filtrelemeyi" bilmediğini unutmayın ...

cevap

9

PrintStream'i ByteArrayOutputStream'e bağlayabilir, PrintStream'inizi kullanmak için JavaMail'e bir bağlantı kurabilirsiniz, JavaMail'i yapın Son olarak, ByteArrayOutputStream öğesinin içeriğini en sevdiğiniz kaydediciye dökün.

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