2013-03-04 123 views
3

我有一个主要问题,试图让我的Log4j在发生问题时发送SMTP电子邮件。这里是我的代码:Log4j SMTP发送错误消息到电子邮件

final Properties properties = new Properties(); 
final String strProperties = "log4j.rootLogger=ERROR, console, smtp\n" 
      + "log4j.appender.console=org.apache.log4j.ConsoleAppender\n" 
      + "log4j.appender.console.Target=System.out\n" 
      + "log4j.appender.console.layout=org.apache.log4j.PatternLayout\n" 
      + "log4j.appender.console.layout.ConversionPattern=%-5p: %c - %m%n\n" 
      + "log4j.appender.smtp=org.apache.log4j.net.SMTPAppender\n" 
      + "log4j.appender.smtp.EvaluatorClass=com.blah.blah.log4j.TriggerOnError\n" 
      + "log4j.appender.smtp.SMTPHost=localhost\n" 
      + "[email protected]\n" 
      + "[email protected]\n" 
      + "log4j.appender.smtp.Subject=BagBox ERROR\n" 
      + "log4j.appender.smtp.layout=org.apache.log4j.PatternLayout\n" 
      + "log4j.appender.smtp.threshold=INFO\n" 
      + "log4j.appender.smtp.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} : %-40c : %-5p %x - %m %n\n" 
      + "log4j.logger.com.blah.blah.service.BagBoxService=INFO, smtp\n" 
      + "log4j.logger.com.blah.blah.security=INFO, smtp\n" 
      + "log4j.logger.org.springframework.core=ERROR, console, smtp\n" 
      + "log4j.logger.org.springframework.beans=ERROR, console, smtp\n" 
      + "log4j.logger.org.springframework.context=ERROR, console, smtp\n" 
      + "log4j.logger.org.springframework.web=ERROR, console, smtp\n" 
      + "log4j.logger.org.springframework.web.servlet.DispatcherServlet=ERROR, console, smtp\n" 
      + "log4j.logger.org.springframework.security=ERROR, console, smtp\n" 
      + "log4j.logger.org.springframework.aop=ERROR, console, smtp\n" 
      + "log4j.logger.org.springframework.ui=ERROR, console, smtp\n"; 

    final ByteArrayInputStream byteProperties = new ByteArrayInputStream(
      strProperties.getBytes()); 
    properties.load(byteProperties); 
    PropertyConfigurator.configure(properties); 

我不断收到在我的控制台以下错误:

Could not connect to SMTP host: localhost, port: 25; 
    nested exception is: 
java.net.SocketException: Network is unreachable: connect 

如果我上运行的IP地址的telnet,它回来很好,可以正常连接。谁能告诉我我做错了什么?谢谢。

回答

0

我猜你的SMTP守护进程正在听一个“真实”的IP,如192.168.1.123,因此不必然localhost(127.0.0.1)作为

log4j.appender.smtp.SMTPHost=localhost 

表示是什么netstat -anpt | grep 25告诉你?你可能在25以外的端口上运行SMTP?

干杯,

+0

实际上我确实有这样的工作。但是,现在我有一个不同的问题。如果log4j向DB发送消息时出现问题(即无法连接到MySQL),它将不会发送电子邮件。如果数据库部分失败,log4j的电子邮件部分仍然可以工作吗? – snowfi6916 2013-03-04 20:37:03

+0

如果没有看到您的代码和数据库appender配置,这是不可能的。但是,一般来说,您可能需要查看['FailoverAppender'](http://logging.apache.org/log4j/2.x/manual/appenders.html),并将数据库appender定义为您的主要和SMTP作为故障转移/次要。不确定它恰好适合你的用例,但你可以从那里工作。 – 2013-03-05 07:43:05

+0

我想我的问题是,如果log4j本身出现错误,您将如何发送电子邮件?它没有发送的原因是因为它仍然是INFO级别,但是有'log4j:ERROR JDBCAppender :: append(),没有准备好追加!',那么我会如何给它发电子邮件? – snowfi6916 2013-03-05 13:46:03

相关问题