2011-06-05 92 views
5

我启用了在我的应用程序中登录,并且我想通过电子邮件(gmail帐户)发送日志错误。我:Log4j在记录错误时无法发送电子邮件

  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附加器

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 
[email protected] 
[email protected] 
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 

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

+0

为什么这个问题被低估? – 2011-06-05 12:27:31

+1

@Swaranga,可能是因为格式不好。检查原件。 – 2011-06-05 12:30:27

回答

7

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

  • 要么写你自己的appender来支持发送消息到GMail SMTP服务器。或者使用Log4j SMTP Appender for Gmail。免责声明:我没有使用过这个项目。
+0

感谢它工作正常 – bmscomp 2011-06-05 13:17:58

1

不完全回答你原来的问题,但Logback似乎支持GMail的out of the box

<appender name="EMAIL" class="ch.qos.logback.classic.net.SMTPAppender"> 
    <smtpHost>smtp.gmail.com</smtpHost> 
    <smtpPort>465</smtpPort> 
    <ssl>true</ssl> 
    <username>[email protected]</username> 
    <password>YOUR_GMAIL_PASSWORD</password> 

    <to>EMAIL-DESTINATION</to> 
    <to>ANOTHER_EMAIL_DESTINATION</to> <!-- additional destinations are possible --> 
    <from>[email protected]</from> 
    <subject>TESTING: %logger{20} - %m</subject> 
    <layout class="ch.qos.logback.classic.PatternLayout"> 
     <pattern>%date %-5level %logger{35} - %message%n</pattern> 
    </layout>  
    </appender> 

来源:文档的logback的Chapter 4: Appenders

3

我面临与连接到GMail SMTP服务器相同的问题,现在我已经解决了它 。下面这段代码用于发送带有Log4j.properties文件设置的电子邮件 。

我使用Log4j.1.2.16版本JDK1.6

请看以下步骤来解决问题:

第一步初始化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","[email protected]"); 
    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 
    [email protected] 
    log4j.appender.email.SMTPPassword=xyz1234 
    [email protected] 
    [email protected] 
    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的所有更改后。属性设置,我开始收到电子邮件。

让我知道是否有人有更好的方法来做到这一点。

1

你的代码有一些问题:的

代替

System.getProperty("mail.smtp.user","[email protected]"); 
System.getProperty("mail.smtp.starttls.enable","true"); 

应该去

System.setProperty("mail.smtp.user","[email protected]"); 
System.setProperty("mail.smtp.starttls.enable","true"); 
5

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

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

> log4j.rootLogger= ERROR,gmail 
> log4j.appender.gmail=org.apache.log4j.net.SMTPAppender 
> log4j.appender.gmail.SMTPProtocol=smtps   
> [email protected] 
> 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 
> [email protected] 
> [email protected] 
> 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 
+0

这应该是正确的答案。谢谢 – 2016-09-20 20:09:49

+0

这条线可能也需要: 'log4j.appender.gmail.smtp.auth = true' – leventunver 2017-07-13 15:10:56

+0

@leventunver不,SMTPProtocol = smtps就足够了SMTPPort = 465。 – 2017-11-20 11:21:21