Log4j在记录错误时无法发送电子邮件

我在我的应用程序中启用了日志记录,并且我希望通过电子邮件(gmail帐户)发送日志错误。 一世:

  1. 设置一个java项目
  2. 添加activation.jar,log4j.java和mail.jar(java邮件)
  3. 我将这些库添加到项目类路径中
  4. 我添加了log4j.properties,我这样配置:
 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 

配置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 

没有发生任何事情没有发送电子邮件,没有显示错误,我不明白为什么,请关于该主题的任何想法???

Log4J提供的SMTP Appender默认情况下不会设置必要的参数来支持GMail。 它不会发出STARTTLS命令来启动SMTP会话。 你可以解决这个问题:

  • 编写自己的appender以支持向GMail SMTP服务器发送消息。
  • 或者,使用Log4j SMTP Appender for Gmail 。 免责声明:我没有使用过这个项目。

这是一个例子:(因为我努力了几天,现在它的作品)

诀窍是:log4j.appender.gmail.SMTPProtocol = smtps

 > log4j.rootLogger= ERROR,gmail > log4j.appender.gmail=org.apache.log4j.net.SMTPAppender > log4j.appender.gmail.SMTPProtocol=smtps > log4j.appender.gmail.SMTPUsername=dummy@gmail.com > log4j.appender.gmail.SMTPPassword=Your gmail password > log4j.appender.gmail.threshold=error > log4j.appender.gmail.SMTPHost=smtp.gmail.com > log4j.appender.gmail.SMTPPort=465 > log4j.appender.gmail.smtp.starttls.enable=true > log4j.appender.gmail.Subject=Logging Message via Gmail > log4j.appender.gmail.To=dummy@example.com > log4j.appender.gmail.From=dummy@gmail.com > log4j.appender.gmail.layout=org.apache.log4j.PatternLayout > log4j.appender.gmail.layout.ConversionPattern=%d{MM/dd/yyyy HH:mm:ss}[%M] %-5p %C - %m%n >log4j.appender.gmail.BufferSize=5 

连接到GMail SMTP服务器我遇到了同样的问题,现在我已经解决了。 以下代码我用来发送带有Log4j.properties文件设置的电子邮件。

我正在使用带有JDK1.6的Log4j.1.2.16版本

请在下面找到解决问题的步骤:

第一步初始化System.getProperties(key,value) 。 要连接到GMail,您必须进行以下代码更改

 static { System.setProperty("mail.smtp.auth", "true"); System.setProperty("mail.smtp.socketFactory.port", "465"); System.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); System.setProperty("mail.smtp.socketFactory.fallback", "false"); System.setProperty("mail.smtp.user","xxx@gmail.com"); System.setProperty("mail.smtp.starttls.enable","true"); System.setProperty("mail.transport.protocol", "smtp"); System.setProperty("mail.smtp.starttls.enable", "true"); System.setProperty("mail.smtp.host", "smtp.gmail.com"); System.setProperty("mail.smtp.port", "465"); System.setProperty("mail.smtp.quitwait", "false"); } 

其次,请参阅log4j.properties文件设置:

  log4j.rootLogger=DEBUG, FILE, email log4j.appender.FILE=org.apache.log4j.RollingFileAppender log4j.appender.FILE.maxFileSize=8192KB log4j.appender.FILE.maxBackupIndex=5 log4j.appender.FILE.File=xxx.log log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.conversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%p] %t %c:%L - %m%n log4j.appender.email=org.apache.log4j.net.SMTPAppender log4j.appender.email.SMTPHost=smtp.gmail.com log4j.appender.email.SMTPPort=465 log4j.appender.email.SMTPUsername=xyz@gmail.com log4j.appender.email.SMTPPassword=xyz1234 log4j.appender.email.From=abcd@gmail.com log4j.appender.email.to=blaha@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 

在代码级别以及log4j.properties设置中执行所有更改后,我开始收到电子邮件。

如果有人有更好的方法,请告诉我。

并没有完全回答你原来的问题,但Logback似乎支持GMail 开箱即用 :

  smtp.gmail.com 465 true YOUR_USERNAME@gmail.com YOUR_GMAIL_PASSWORD EMAIL-DESTINATION ANOTHER_EMAIL_DESTINATION  YOUR_USERNAME@gmail.com TESTING: %logger{20} - %m  %date %-5level %logger{35} - %message%n   

来自: 第4章: Logback文档的附加程序。

您的代码有一些问题:

代替

 System.getProperty("mail.smtp.user","xxx@gmail.com"); System.getProperty("mail.smtp.starttls.enable","true"); 

它应该去

  System.setProperty("mail.smtp.user","xxx@gmail.com"); System.setProperty("mail.smtp.starttls.enable","true"); 
 I am using the below log4j configuration . But There is nothing that happened no email sent and no error shown , and I do not understand why, Please any idea about that topic ??? I am using jdk 1.8 and log4j-1.2.17.jar , activation.jar, java-mail-1.4.jar,mail-api-1-3-1.jar,slf4j-api-1.7.1.jar... log4j.appender.MAIL=org.apache.log4j.net.SMTPAppender log4j.appender.MAIL.SMTPProtocol=smtps log4j.appender.MAIL.SMTPUsername=username@gmail.com log4j.appender.MAIL.SMTPPassword=password log4j.appender.MAIL.threshold=error log4j.appender.MAIL.SMTPHost=smtp.gmail.com log4j.appender.MAIL.SMTPPort=465 log4j.appender.MAIL.smtp.starttls.enable=true log4j.appender.MAIL.Subject=Error Alert on server log4j.appender.MAIL.to=username@gmail.com log4j.appender.MAIL.From=no-reply@gmail.com log4j.appender.MAIL.layout=org.apache.log4j.PatternLayout log4j.appender.MAIL.layout.ConversionPattern=[%d{ISO8601}]%n%n%-5p%n%n%c%n%n%m%n%n`enter code here` log4j.appender.MAIL.BufferSize=5 log4j.appender.MAIL.LevelRangeFilter.LevelMin=error log4j.appender.MAIL.LevelRangeFilter.LevelMax=fatal log4j.appender.MAIL.smtp.auth=true