【问题标题】:Log4j failing to send an email when logging an errorLog4j 在记录错误时无法发送电子邮件
【发布时间】:2011-09-08 17:28:02
【问题描述】:

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

  1. 设置java项目
  2. 添加activation.jar、log4j.java和mail.jar(java邮件)
  3. 我将这些库添加到项目类路径中
  4. 我添加了 log4j.properties 并像这样配置它:
log4j.rootLogger=主记录器、电子邮件、目的地 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
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

没有发生任何事情,没有发送电子邮件,也没有显示错误,我不明白为什么,请对这个主题有任何想法???

【问题讨论】:

  • 为什么这个问题被否决了?
  • @Swaranga,可能是因为格式不正确。检查原件。

标签: java logging log4j gmail


【解决方案1】:
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

【讨论】:

    【解决方案2】:

    这是一个例子: (因为我努力了几天,现在成功了)

    诀窍是: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
    

    【讨论】:

    • 这行可能也需要:log4j.appender.gmail.smtp.auth=true
    • @leventunver 不,SMTPProtocol=smtps 对于 SMTPPort=465 就足够了。
    • 我看到了异常 java.net.SocketException: Permission denied: connect at javax.mail.MessagingException: Could not connect to SMTP host: smtp.gmail.com, port: 587 请帮忙。我给了我的 UN/Passwd 仍然无法工作。如何为 logback 添加 SMTPProtocol。
    【解决方案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","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 设置进行所有更改后,我开始收到电子邮件。

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

    【讨论】:

      【解决方案4】:

      您的代码有一些问题:

      而不是

      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");
      

      【讨论】:

        【解决方案5】:

        没有完全回答你原来的问题,但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>YOUR_USERNAME@gmail.com</username>
            <password>YOUR_GMAIL_PASSWORD</password>
        
            <to>EMAIL-DESTINATION</to>
            <to>ANOTHER_EMAIL_DESTINATION</to> <!-- additional destinations are possible -->
            <from>YOUR_USERNAME@gmail.com</from>
            <subject>TESTING: %logger{20} - %m</subject>
            <layout class="ch.qos.logback.classic.PatternLayout">
              <pattern>%date %-5level %logger{35} - %message%n</pattern>
            </layout>       
          </appender>
        

        来自:Chapter 4: Appenders,来自 Logback 文档。

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-19
            • 1970-01-01
            • 1970-01-01
            • 2013-02-18
            • 1970-01-01
            • 2016-08-24
            • 1970-01-01
            • 2017-05-18
            相关资源
            最近更新 更多