2013-06-24 130 views
3

我通過WSO2產品使用log4j.properties。我需要實現一個appender來使用SMTPAppender並使用Gmail郵件服務器發送電子郵件通知。所以,當我配置log4j並啓動ESB WSO2服務器時,管理控制檯打印:log4j:ERROR Could not instantiate class [com.notification.GmailSMTPAppender]錯誤無法實例化類

我的實現是:

package com.notification; 

public class GmailSMTPAppender extends SMTPAppender { 

    protected Session session; 

    public GmailSMTPAppender() { 
      super(); 
    } 

    /** 
    * Create mail session. 
    * 
    * @return mail session, may not be null. 
    */ 
    protected Session createSession() { 
      Properties props = new Properties(); 
      props.put("mail.smtps.host", getSMTPHost()); 
      props.put("mail.smtps.auth", "true"); 

      Authenticator auth = null; 
      if (getSMTPPassword() != null && getSMTPUsername() != null) { 
        auth = new Authenticator() { 
          protected PasswordAuthentication getPasswordAuthentication() { 
            return new PasswordAuthentication(getSMTPUsername(), 
                getSMTPPassword()); 
          } 
        }; 
      } 
      session = Session.getInstance(props, auth); 
      if (getSMTPProtocol() != null) { 
        session.setProtocolForAddress("rfc822", getSMTPProtocol()); 
      } 
      if (getSMTPDebug()) { 
        session.setDebug(getSMTPDebug()); 
      } 
      return session; 
    } 

    /** 
    * Send the contents of the cyclic buffer as an e-mail message. 
    */ 
    protected void sendBuffer() { 
      try { 
        MimeBodyPart part = new MimeBodyPart(); 

        StringBuffer sbuf = new StringBuffer(); 
        String t = layout.getHeader(); 
        if (t != null) 
          sbuf.append(t); 
        int len = cb.length(); 
        for (int i = 0; i < len; i++) { 
          LoggingEvent event = cb.get(); 
          sbuf.append(layout.format(event)); 
          if (layout.ignoresThrowable()) { 
            String[] s = event.getThrowableStrRep(); 
            if (s != null) { 
              for (int j = 0; j < s.length; j++) { 
                sbuf.append(s[j]); 
                sbuf.append(Layout.LINE_SEP); 
              } 
            } 
          } 
        } 
        t = layout.getFooter(); 
        if (t != null) 
          sbuf.append(t); 
        part.setContent(sbuf.toString(), layout.getContentType()); 

        Multipart mp = new MimeMultipart(); 
        mp.addBodyPart(part); 
        msg.setContent(mp); 

        msg.setSentDate(new Date()); 
        send(msg); 
      } catch (Exception e) { 
        LogLog.error("Error occured while sending e-mail notification.", e); 
      } 
    } 

    /** 
    * Pulled email send stuff i.e. Transport.send()/Transport.sendMessage(). So 
    * that on required this logic can be enhanced. 
    * 
    * @param msg 
    *   Email Message 
    * @throws MessagingException 
    */ 
    protected void send(Message msg) throws MessagingException { 
      SMTPTransport t = (SMTPTransport) session.getTransport("smtps"); 
      try { 
        t.connect(getSMTPHost(), getSMTPUsername(), getSMTPPassword()); 
        t.sendMessage(msg, msg.getAllRecipients()); 
      } finally { 
        System.out.println("Response: " + t.getLastServerResponse()); 
        t.close(); 
      } 
    } 

} 

我如何實例化這個附加器在我的log4j.properties配置的?

+1

粘貼完整的堆棧跟蹤可能有幫助 – radai

+1

您在哪裏放置了jar? –

+0

在它使用WSO2_ESB的庫的存儲庫中 – user2514698

回答

0

您是否需要以編程方式添加Appender? 檢查以下內容post

相關問題