Symfony2:在服务中使用记录器时出现问题(作为参数传递)

Symfony2:在服务中使用记录器时出现问题(作为参数传递),symfony,monolog,Symfony,Monolog,我正在使用symfony2.1开发一个项目 我已经创建了一个从控制器调用的服务,它工作正常。 现在,我需要服务生成日志,我正试图通过以下方式传递日志: soap.client: class: MyFirm\MyAppBundle\Service\SOAPClient arguments: logger: "@logger" namespace MyFirm\MyAppBundle\Service; use \SoapClient as Soa

我正在使用symfony2.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;
    }


}
我的服务是这样定义的:

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不存在),应用程序将挂起


我做错什么了吗?非常感谢。

这不是来自logger的问题,而是来自SoapClient的问题,它不会在无法访问WSDL的情况下引发任何异常。。。它将等待直到抛出致命错误


在调用SoapClient;)之前,必须检查WSDl是否存在

抱歉,问题不在logger,而是在以下行中:

  $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"

已解决并修复。很抱歉收到垃圾邮件。

SoapClient确实会在找不到WSDL时生成异常:SOAP-ERROR:解析WSDL:无法从“”加载:无法加载外部实体“”好的,我有一个很好的印象,它没有作为经典异常处理。它至少帮助我使用服务中的记录器。