当我调用 logger
service时,在日志文件中获取此信息消息它是否有效但是在日志文件中写入此消息:
php.INFO:User不推荐使用:“logger”服务是私有的,从容器中获取它自Symfony 3.2以来就已弃用,并且将在4.0中失败 . 您应该将服务公开,或者直接停止使用容器并改为使用依赖注入 . {“exception”:“[object](ErrorException(代码:0):用户不推荐使用:\”logger \“服务是私有的,从容器中获取它自Symfony 3.2以来就已弃用,并且将在4.0中失败 . 你应该制作服务公共,或者直接停止使用容器并改为使用依赖注入 . 在/home///####PROJECT/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Container.php:275 )“} []
我的symfony版本:3.4.1
2 回答
$this->container->get('logger')
失败,因为logger现在(截至3.2)标记为私有服务,默认情况下所有服务都是私有的,这意味着这些服务不能从容器返回,而必须依赖注入(类构造函数必须采用logger作为参数并成为可访问类的属性,或在服务配置中标记为public,并且由于logger是symfony组件,服务配置在symfony项目中,您必须复制 Logger 从symfony配置到项目服务配置并添加public: true
,以从容器访问 Logger 实例 .如Symfony 3.4中所述,
MonologBundle
和所有其他服务提供的logger
服务默认设置为私有 . [sic]要解决此问题,建议的方法是使用依赖注入 . http://symfony.com/doc/3.4/logging.html
源代码参考:https://github.com/symfony/monolog-bundle/blob/v3.1.0/Resources/config/monolog.xml#L17
对于服务定义,启用
autowire
时可以使用依赖注入 . [sic]然后,要将Dependency注入服务,请将参数的类型提示添加到构造函数中 .
如果禁用
autowire
,则可以手动定义服务以注入 Logger 别名 .或者,要强制从容器中公开访问 Logger 别名,您可以在应用程序服务配置中重新声明服务别名 .
您也可以在编译器传递中将logger设置为公共服务,而不是覆盖配置中的值 . https://symfony.com/doc/3.4/service_container/compiler_passes.html
Symfony Flex
Symfony Bundle