【发布时间】:2013-06-04 20:18:30
【问题描述】:
编辑:我真正要问的是:你如何使用 Logback 的 SMTPAppender 指定 to 和 from 电子邮件地址何时它配置为使用 JNDI 查找? 这应该是 SMTPAppender 的基本功能形式,如果 SMTPAppender 不支持此功能,它就无法使用 JNDI 查找!
我定义了以下 Logback SMTPAppender:
<appender name="logManager-smtpAppender" class="ch.qos.logback.classic.net.SMTPAppender">
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>WARN</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>NEUTRAL</onMismatch>
</filter>
<filter class="ch.qos.logback.classic.filter.LevelFilter">
<level>ERROR</level>
<onMatch>ACCEPT</onMatch>
<onMismatch>DENY</onMismatch>
</filter>
<asynchronousSending>false</asynchronousSending>
<sessionViaJNDI>true</sessionViaJNDI>
<jndiLocation>java:comp/env/mail/Session-local</jndiLocation>
<subject>%logger{20} - %m</subject>
<layout class="ch.qos.logback.classic.html.HTMLLayout"/>
<cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
<bufferSize>25</bufferSize>
</cyclicBufferTracker>
</appender>
如您所见,我正在使用 JNDI 来查找邮件服务器凭据。
当它运行时,我得到:
15:50:06,857 |- ch.qos.logback.classic.net.SMTPAppender[logManager-smtpAppender] 中的信息 - 空目标地址。中止电子邮件传输
这让我意识到:在上面的SMTPAppender 或我的context.xml 中没有指定收件人/发件人电子邮件地址。
如何/在哪里(请举例!)我应该指定这些吗?!?我检查了 Logback 的源代码,这条消息是从 SMTPAppenderBase.java 内部打印出来的:
List<InternetAddress> destinationAddresses = parseAddress(lastEventObject);
if (destinationAddresses.isEmpty()) {
addInfo("Empty destination address. Aborting email transmission");
return;
}
private List<InternetAddress> parseAddress(E event) {
int len = toPatternLayoutList.size();
List<InternetAddress> iaList = new ArrayList<InternetAddress>();
for (int i = 0; i < len; i++) {
try {
PatternLayoutBase<E> emailPL = toPatternLayoutList.get(i);
String emailAdrr = emailPL.doLayout(event);
if (emailAdrr == null || emailAdrr.length() == 0) {
continue;
}
InternetAddress[] tmp = InternetAddress.parse(emailAdrr, true);
iaList.addAll(Arrays.asList(tmp));
} catch (AddressException e) {
addError("Could not parse email address for [" + toPatternLayoutList.get(i) + "] for event [" + event + "]", e);
return iaList;
}
}
return iaList;
}
但我仍然不知道我应该在哪里/如何设置到/从字段。有任何想法吗?提前致谢!
【问题讨论】:
标签: java jndi logback smtpappender