Logback - software added by SMTPAppender leaves message body empty

What am I missing? I have the code below that successfully sends an email, but the body of the email is empty. I think this is due to patternLayout, but everything looks fine. Any ideas on what's 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); } 
+1
source share
1 answer

The problem is that both PatternLayout and OnMarkerEvaluator have launch methods that need to be called (MarkerEvaluator seemed to work without it).

In addition, both must also know loggerContext (set by calling patternLayout.setContext (lc)), otherwise you will get the following:

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

Now all is well.

0
source

All Articles