1

Symfony 2.1 を使用してプロジェクトを開発しています。

コントローラーから呼び出されるサービスを作成しましたが、正常に動作しています。今、サービスがログを生成する必要があり、次の方法でロガーを渡そうとしています:

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 が存在しない場合)、アプリケーションがハングします。

私は何か間違ったことをしていますか?どうもありがとう。

4

2 に答える 2

0

これはロガーからの問題ではなく、WSDL に到達できない場合に例外をスローしない SoapClient からの問題です...致命的なエラーがスローされるまで待機します...

SoapClient を呼び出す前に、WSDl が存在するかどうかを確認する必要があります;)

于 2013-01-17T17:44:49.563 に答える
0

申し訳ありませんが、問題はロガーではなく、次の行にありました。

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

これらの行を削除して例外メッセージのみをログに記録すると、すべてうまくいきます。WSDL が見つからない場合、SoapClient は例外を生成します。

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

解決して修正しました。スパムでごめんなさい。

于 2013-01-17T17:52:36.437 に答える