Java – Log4j failing to send an email when logging an error

gmailjavalog4jlogging

I enabled logging in my application, and I want to send logs error by email (gmail account). I:

  1. Set up a java project
  2. add activation.jar , log4j.java and mail.jar (java mail)
  3. I added those libraries to the project class path
  4. I added log4j.properties and I configured it like this :
log4j.rootLogger= mainlogger, Email, dest
log4j.appender.mainlogger=org.apache.log4j.ConsoleAppender
log4j.appender.mainlogger.target=System.out
log4j.appender.mainlogger.layout=org.apache.log4j.PatternLayout
log4j.appender.mainlogger.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %p %-4r [%t] %-5p %c %x - %m%n
log4j.appender.dest=org.apache.log4j.FileAppender
log4j.appender.dest.File=log.log
log4j.appender.dest.layout=org.apache.log4j.PatternLayout
log4j.appender.dest.layout.ConversionPattern=%d{dd MMM yyyy HH:mm:ss,SSS} %p %-4r [%t] %-5p %c %x - %m%n

Configuring the SMTP appender

log4j.appender.Email=org.apache.log4j.net.SMTPAppender
log4j.appender.Email.BufferSize=512
log4j.appender.Email.Threshold=ERROR
log4j.appender.Email.SMTPHost=smtp.gmail.com
log4j.appender.Email.SMTPUsername=myusername
log4j.appender.Email.SMTPPassword=mypassword
log4j.appender.Email.From=myemail@gmail.com 
log4j.appender.Email.To=myotheremail@gmail.com
log4j.appender.Email.Subject=Error Report
log4j.appender.Email.layout=org.apache.log4j.PatternLayout
log4j.appender.Email.layout.ConversionPattern=%d [%t] %-5p %c %x - %m%n

There is nothing that happened no email sent and no error shown , and I do not understand why, Please any idea about that topic ???

Best Answer

The SMTP Appender provided by Log4J does not setup the necessary parameters to support GMail by default. It does not issue the STARTTLS command to initiate a SMTP session. You could rectify this by:

  • Either writing your own appender to support sending of messages to the GMail SMTP server.
  • Or, by using the Log4j SMTP Appender for Gmail. Disclaimer: I haven't used this project.