如何在Symfony命令中获得指定通道的记录器?

u3r8eeie  于 2023-02-19  发布在  其他
关注(0)|答案(2)|浏览(123)

我尝试创建一个symfony命令,我想记录命令执行过程中发生的事情,所以我尝试在monolog.yaml中创建一个日志记录器通道:

monolog:
    channels: ['download_site']
    handlers:
        download_site:
            type: stream
            path: "%kernel.logs_dir%/download_site_%kernel.environment%.log"
            level: debug
            channels: ["download_site"]

把频道接进来

class DownloadSiteCommand extends Command
{
    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $logger = $this->getContainer()->get('monolog.logger.download_site');
    }
}

但当我执行命令时,错误抛出:
在下载站点命令. php第31行:
尝试调用类“App\Command\Do wnloadSiteCommand”的名为“getContainer”的未定义方法。

w7t8yxp5

w7t8yxp51#

试试这个

use Psr\Log\LoggerInterface;

class DownloadSiteCommand extends Command
{
    private $logger;

    public function __construct(LoggerInterface $logger)
    {
        $this->logger = $logger;
    }

    protected function execute(InputInterface $input, OutputInterface $output)
    {
        $this->logger->info('...');
    }
}

services.yaml

App\Command\DownloadSiteCommand:
    tags:
        - { 'name': 'monolog.logger', 'channel': 'download_site' }
sqougxex

sqougxex2#

如果您想为记录器使用自定义通道而不自动安装:

/** @var LoggerInterface $logger */
$logger = $this->getContainer()->get('monolog.logger.my_channel');
$logger->warning('Foo');

相关问题