2013-03-04 77 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

相關問題