除非Thread.sleep,否则Log4j不发送邮件

时间:2013-08-28 11:54:18

标签: java log4j

我遇到log4j问题并发送通知电子邮件。

我的log4j.properties

log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender
log4j.appender.MAIL.Threshold=ERROR
log4j.appender.MAIL.BufferSize=512
log4j.appender.MAIL.SMTPHost=10.10.10.10
log4j.appender.MAIL.From=team@domain.com
log4j.appender.MAIL.Subject=Subject Here
log4j.appender.MAIL.To=team@domain.com
log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout
log4j.appender.MAIL.layout.ConversionPattern=%d{yyyy/MM/dd HH:mm:ss,SSS} [%t] %-5p %c %x - %m%n

该程序在尝试发送和发送电子邮件时导致错误,因此我进行了log.error()测试。

我测试了下面的代码,但它仍然没有发送电子邮件。

public static void main(String[] args) {
    log.error("Error ");
}

在上面的代码中添加Thread.sleep时。它有效!

public static void main(String[] args) throws Exception{
    log.error("Error ");
    Thread.sleep(1000000L);
}

问题是main thread退出,导致mail sending thread终止。所以我决定改变程序等待(不退出),直到log4j完全发送邮件。但我不知道如何在log4j中获取邮件发送状态。

任何帮助都会受到赞赏。

2 个答案:

答案 0 :(得分:0)

尝试将BufferSize值设置为1,也许记录器只是在发送

之前等待一个完整的缓冲区

答案 1 :(得分:0)

添加对

的调用
org.apache.log4j.LogManager.shutdown();

main方法

的末尾