Symfony3记录器即服务
我在symfony应用程序中有自定义类,我正在尝试在其中实现记录器,但没有成功。我尝试过这样的服务:Symfony3记录器即服务,symfony,logging,service,Symfony,Logging,Service,我在symfony应用程序中有自定义类,我正在尝试在其中实现记录器,但没有成功。我尝试过这样的服务: #in app/config/services.yml services: ControlLib.logger.monolog: class: My\TestBundle\Lib\ControlsLib arguments: ["@logger"] tags: - { name: monolog.logger}
#in app/config/services.yml
services:
ControlLib.logger.monolog:
class: My\TestBundle\Lib\ControlsLib
arguments: ["@logger"]
tags:
- { name: monolog.logger}
#in My/TestBundle/Lib/ControlsLib
class ControlsLib {
private $logger;
public function __construct(LoggerInterface $logger ) {
$this->logger = $logger;
}
public function mainControl() {
$this->logger->info(var_export('In my lib',true));
}
}
我在调用函数时收到此消息
Catchable Fatal Error: Argument 1 passed to
My\TestBundle\Lib\ControlsLib::__construct() must be an instance of
Symfony\Component\HttpKernel\Log\LoggerInterface, none given
已测试您的代码,并按预期工作: AppBundle/Lib/ControlsLib.php:
namespace AppBundle\Lib;
use Psr\Log\LoggerInterface;
class ControlsLib
{
private $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function mainControl()
{
$this->logger->info(var_export('In my lib',true));
}
}
app/config/services.yml:
AppBundle/Controller/AppController.php:
第32行的AppController.php:
控制B{#108▼
-记录器:记录器{#107▼
#名称:“应用程序”
#处理程序:数组:2[▶]
#处理器:阵列:2[▶]
#微秒时间戳:真
}
}
请注意,您的服务名称应该是小写的,因为symfony会自动将其小写。测试了您的代码,并按预期工作: AppBundle/Lib/ControlsLib.php:
namespace AppBundle\Lib;
use Psr\Log\LoggerInterface;
class ControlsLib
{
private $logger;
public function __construct(LoggerInterface $logger)
{
$this->logger = $logger;
}
public function mainControl()
{
$this->logger->info(var_export('In my lib',true));
}
}
app/config/services.yml:
AppBundle/Controller/AppController.php:
第32行的AppController.php:
控制B{#108▼
-记录器:记录器{#107▼
#名称:“应用程序”
#处理程序:数组:2[▶]
#处理器:阵列:2[▶]
#微秒时间戳:真
}
}
请注意,您的服务名称应该是小写的,因为symfony会自动将其小写。您可以在控制器中访问@logger服务吗?在控制器中,我只使用$this->get('logger')->info(var_export('test',true))它是workedcontrollib.logger.monolog应该是小写的,测试了你的代码,它就可以工作了。我把它改成小写,但它对我仍然不起作用。我在ControlsLib的u construct()中也有同样的错误。我想我错过了一些东西。回答了,但它可以工作。你能在控制器中访问@logger服务吗?在控制器中我只使用$this->get('logger')->info(var_export('test',true))和它的workedcontrollib.logger.monolog应该是小写的,测试了你的代码,它就工作了。我把它改成小写,但它仍然不适用于我。我在_构造()中有相同的错误关于ControlsLib。我想我错过了一些东西。回答,但它可以工作。它是捆绑包的服务文件还是应用程序的服务文件?我有完全相同的,但仍然是构造错误。我不理解AppBundle/Controller/AppController.php中的部分,我没有这种奇怪的东西,尝试删除服务的“标记”部分。仍然存在问题“可捕获的致命错误:传递给My\TestBundle\Lib\ControlsLib::\uu construct()的参数1必须实现接口Psr\Log\LoggerInterface,未给定任何”。Can”不要做更多的抱歉。删除一个重写服务定义的类。尝试另一个类…它是捆绑包的服务文件还是应用程序的服务文件?我有完全相同的,但仍然是构造错误。我不理解AppBundle/Controller/AppController.php中的部分,我没有这个奇怪的,请尝试删除“标记”服务的一部分。仍然存在问题“可捕获的致命错误:传递给My\TestBundle\Lib\ControlsLib::\uu construct()的参数1必须实现接口Psr\Log\LoggerInterface,未给定”。无法执行更多抱歉。请删除一个,然后重写服务定义。尝试其他类。。。
$this->get('controllib.logger.monolog')->mainControl();
dump($this->get('controllib.logger.monolog')); die();