我正在使用Symfony 2.1开发一个项目。
我创建了一个从控制器调用的服务,它运行正常。 现在我需要服务生成日志,我正试图以这种方式传递logger:
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)
这不是来自记录器的问题,而是来自SoapClient,如果无法访问WSDL,它不会抛出任何异常......它等待直到抛出致命错误...
在调用SoapClient之前,你必须检查WSDl是否存在;)
答案 1 :(得分:0)
对不起,问题不在于记录器,而在于行:
$log_text = print_r($ex, true)."\n".
$client->__getLastRequest()."\n".
$client->__getLastResponse();
如果删除这些行并仅记录Exception消息,则一切顺利。 如果找不到WSDL,SoapClient会生成异常:
SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://localhost/unknown.wsdl' :
failed to load external entity "http://localhost/unknown.wsdl"
解决并修复。对不起垃圾邮件。