java - Log4j 以编程方式设置 SMTP 设置并不完全有效

标签 java smtp log4j

我正在使用 Log4j 发送有关错误的电子邮件日志,并且希望在 java 中的 log4j 中设置 SMTP 设置,而不是在属性文件中。设置密码有效,我可以使用它成功发送电子邮件

private static final Logger logger = Logger.getLogger("emailer");

(...)

Enumeration<?> enm = logger.getAllAppenders();
while (enm.hasMoreElements()) {
    Object element = enm.nextElement();
    if (element instanceof SMTPAppender) {
        ((SMTPAppender) element).setSMTPPassword(password);
    }
}

但是,在 SMTPAppender 中使用其他 setter 不会执行任何操作(设置主机、用户名等),并且 log4j 将继续使用属性文件的设置。

(...)

log4j.logger.emailer=stdout, email
log4j.additivity.emailer=false

log4j.appender.email=org.apache.log4j.net.SMTPAppender
log4j.appender.email.SMTPHost=smtp.gmail.com
log4j.appender.email.SMTPPort=465
log4j.appender.email.SMTPUsername=username@gmail.com
log4j.appender.email.SMTPPassword=-
log4j.appender.email.From=username@gmail.com
log4j.appender.email.to=username@gmail.com
log4j.appender.email.Subject=Error Alert
log4j.appender.email.layout=org.apache.log4j.PatternLayout
log4j.appender.email.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n
log4j.appender.email.BufferSize=10
log4j.appender.email.Threshold=ERROR

最佳答案

看起来您需要在更改名称或密码后调用 activateOptions() 。

关于java - Log4j 以编程方式设置 SMTP 设置并不完全有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12911622/

相关文章:

java - GWT 和存储 session key

c# - SmtpClient 发送原始 Html

grails - 如何发送带有布局的电子邮件

java - 如何以编程方式读取 log4j 2 配置?

java - 在 webapp 中以编程方式获取 tomcat 日志文件

java - 获取自定义 JPanel 以显示自定义 JComponents (Java Swing)

java - 将 Zxing 条码扫描仪集成到我的 Android 应用程序中

java - 有什么方法可以抑制 stringTemplate 中属性 a 未定义错误吗?

java - 在切换选项卡之前验证 CTabFolder

apache - Laravel/XAMPP/Sendmail 不发送邮件