2012-09-23 12 views
8

मैं जावामेल सत्र पर setDebug(true) कैसे कर सकता हूं लेकिन स्ट्रीम को कैप्चर कर सकता हूं और इसे अपने लॉगिंग फ्रेमवर्क में उपयोग कर सकता हूं? (शॉर्ट स्रोत डाउनलोड करने, विधि बदलते एक पैरामीटर के रूप स्ट्रीम को स्वीकार करने, यह recompiling की, ...)जावामेल सेटडिबग (सत्य)

आम तौर पर, वहाँ जावा में एक मानक तरीका "अपहरण और redirect" करने के लिए सामान्य धारा उत्पादन होता है इस फैशन में? ध्यान दें कि System.out पहले से ही अन्य आउटपुट के साथ प्रदूषित हो सकता है और मुझे नहीं पता कि उसे "फ़िल्टर" कैसे करें ...

उत्तर

9

आप प्रिंटस्ट्रीम को बाइटएरे ऑटपुटस्ट्रीम से लिंक कर सकते हैं, अपने प्रिंटस्ट्रीम का उपयोग करने के लिए जावामेल को बताएं, जावामेल करें सामान और अंत में, अपने पसंदीदा लॉगर में ByteArrayOutputStream की सामग्री को डंप करें।

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