4

私は WSO2 製品を通じて log4j.properties を使用しています。SMTPAppender と連携し、gmail smtp サーバーを使用して電子メール通知を送信するには、アペンダーを実装する必要がありました。そのため、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 構成でこのアペンダーをインスタンス化するにはどうすればよいですか??

4

1 に答える 1

1

アペンダーをプログラムで追加する必要がありますか? 次の投稿を確認してください

于 2013-06-25T17:07:22.700 に答える