编辑:我在这里真正要问的是:当配置为使用 JNDI 查找时,如何使用 Logback指定to
和电子邮件地址?from
SMTPAppender
这应该是功能的基本形式,如果它不支持此功能,就无法使用 JNDI 查找SMTPAppender
!SMTPAppender
我SMTPAppender
定义了以下 Logback:
<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;
}
但我仍然不知道我应该在哪里/如何设置到/从字段。有任何想法吗?提前致谢!