错误无法实例化类

时间:2013-06-24 02:05:41

标签: java log4j wso2

我通过WSO2产品使用log4j.properties。我需要实现一个appender来使用SMTPAppender并使用gmail smtp服务器发送电子邮件通知。因此,当我配置log4j并启动ESB WSO2 Server时,管理控制台打印: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配置中实例化此appender?

1 个答案:

答案 0 :(得分:0)

你需要以编程方式添加Appender吗? 请查看以下post