2013-06-24 6 views
3

Я работаю с log4j.properties через продукты WSO2. Мне нужно было внедрить приложение для работы с SMTPAppender и отправлять уведомления по электронной почте с помощью gmail smtp-сервера. Итак, когда я настраиваю log4j и запускаю ESB WSO2 Server, консоль управления печатает: log4j:ERROR Could not instantiate class [com.notification.GmailSMTPAppender].ERROR Не удалось создать экземпляр класса

Моя реализация была:

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

} 

Как я могу создать экземпляр этого Appender на моей конфигурации log4j.properties ??

+1

Вставка полной трассы стека может помочь – radai

+1

где вы разместили банку? –

+0

в репозитории библиотек он использует WSO2_ESB – user2514698

ответ

0

Нужно ли вам программно добавлять Appender? Проверьте следующее: post