2013-01-17 57 views
1

我正在使用Symfony 2.1開發一個項目。Symfony2:在服務中使用記錄器的問題(作爲參數傳遞)

我創建了一個正在從控制器調用的服務,它工作正常。 現在我需要的是服務生成的日誌,我試圖通過記錄是這樣的:

soap.client: 
    class: MyFirm\MyAppBundle\Service\SOAPClient 
     arguments: 
      logger: "@logger" 

我服務的定義是這樣的:

namespace MyFirm\MyAppBundle\Service; 

use \SoapClient as SoapClient; 

use Monolog\Logger; 

class SOAPClient 
{ 
    private $logger; 

    function __construct (Logger $logger) 
    { 
     $this->logger = $logger; 
    } 

    function sendMessage ($message, $wsdl_url) 
    { 
     $webServResult = "ERROR"; 

     try{ 
      $client = new SoapClient($wsdl_url, array("trace"=>true, 
        "exceptions"=>true));   
      $webServResult=$client->sendMessage($data); 
     } 
     catch(\Exception $ex){ 
      $webServResult="ERROR"; 
      $message=$ex->getMessage(); 
      $log_text = print_r($ex, true)."\n". 
        $client->__getLastRequest()."\n". 
        $client->__getLastResponse(); 
      $this->logger->err("ERROR: ".$log_text);    
     }    

     return $webServResult; 
    } 


} 

然而,當我使用記錄(例如,如果wsdl不存在),應用程序將掛起。

我做錯了什麼?非常感謝。

+0

它至少幫助我使用服務中的記錄器。 –

回答

0

對不起,這個問題是不是在記錄,但在線路:

$log_text = print_r($ex, true)."\n". 
       $client->__getLastRequest()."\n". 
       $client->__getLastResponse(); 

如果我刪除這些行和僅記錄異常消息一切正常。 SoapClient的不產生異常,如果沒有找到該WSDL:

SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://localhost/unknown.wsdl' : 
      failed to load external entity "http://localhost/unknown.wsdl" 

解決並固定。對垃圾郵件抱歉。

0

這是不是從記錄器,但是從SoapClient的一個problzm不扔在WSDL無法訪問的情況下,任何例外......它一直等待,直到一個致命的錯誤被拋出...

你必須檢查WSDL打電話前SoapClient的存在;)

+0

如果未找到WSDL,SoapClient會生成異常: ** SOAP-ERROR:解析WSDL:無法從'http://localhost/unknown.wsdl'加載:無法加載外部實體「http:/ /localhost/unknown.wsdl"** – DaveFX

+0

好吧,我有一個很遠的紀念品,它不是作爲一個經典的例外處理。 – AlterPHP

相關問題