2011-06-05 112 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

相關問題