重新登录-以编程方式添加的SMTPAppender将邮件正文留空 [英] Logback - Programatically added SMTPAppender leaves message body blank

查看:190
本文介绍了重新登录-以编程方式添加的SMTPAppender将邮件正文留空的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想念什么?我有以下代码可以成功发送电子邮件,但是电子邮件的正文为空.我认为这与patternLayout有关,但一切看起来都还不错.有什么想法吗?

What am I missing? I have the below code which successfully sends an email, but the body of the email is empty. I'd think it has to do with the patternLayout, but everything looks okay. Any ideas on what is going on?

private void createAdminNotifyAppender(LoggerContext lc, AppConfigPropertiesReader propReader)
{
    logger.info("Setting up logback admin_notify logging");

    //Set up the admin notify appender programatically (needs to use the properties from the propReader above)
    OnMarkerEvaluator markerEvaluator = new OnMarkerEvaluator();
    markerEvaluator.addMarker(LogbackMarker.ADMIN_NOTIFY.toString());
    String adminEmails = propReader.getProperty("adminEmail");
    PatternLayout patternLayout = new PatternLayout();
    patternLayout.setPattern("[\\(%-6threadHash\\) app=iv  %d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level %-25logger{25} - %msg%n");

    SMTPAppender adminNotifyAppender = new SMTPAppender();
    adminNotifyAppender.setContext(lc);
    adminNotifyAppender.setEvaluator(markerEvaluator);
    adminNotifyAppender.setSMTPHost(propReader.getProperty("smtpHost"));
    for (String adminEmail : adminEmails.split(",")) { adminNotifyAppender.addTo(adminEmail); };
    adminNotifyAppender.setFrom(propReader.getProperty("sysEmailAddressNoReply"));
    adminNotifyAppender.setSubject("System Alert! [" + propReader.getProperty("environment") + "]");
    adminNotifyAppender.setLayout(patternLayout);
    adminNotifyAppender.start();

    Logger rootLogger = lc.getLogger(Logger.ROOT_LOGGER_NAME);
    rootLogger.addAppender(adminNotifyAppender);
}

推荐答案

问题在于PatternLayout和OnMarkerEvaluator都具有应调用的启动方法(MarkerEvaluator似乎没有它就可以工作).

The issue is that both the PatternLayout and the OnMarkerEvaluator have the start methods that should be called (MarkerEvaluator seemed to work without it).

此外,两个人都还需要了解loggerContext(通过调用patternLayout.setContext(lc)进行设置),否则您将像下面这样被淘汰:

Additionally, both need to know the loggerContext as well (set by calling patternLayout.setContext(lc)), otherwise you'll get out put like the following:

[(%PARSER_ERROR[threadHash]) app=iv  %PARSER_ERROR[d]] %PARSER_ERROR[level] %PARSER_ERROR[logger] - %PARSER_ERROR[msg]%PARSER_ERROR[n]

现在一切都好.

这篇关于重新登录-以编程方式添加的SMTPAppender将邮件正文留空的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆