📜  注入多个记录器 symfony (1)

📅  最后修改于: 2023-12-03 15:11:04.930000             🧑  作者: Mango

注入多个记录器 symfony

在Symfony中,我们可能需要拥有不止一个记录器,以便我们可以在不同的日志器中记录不同的信息。以下是如何注入多个记录器。

步骤1: 在config/packages/monolog.yaml中配置另一个Channel

我们可以通过将channel关键字添加到monolog.yaml文件中来配置另一个记录器。

monolog:
    channels: ["main", "additional"]
    handlers:
        main:
            type: stream
            path: "%kernel.logs_dir%/%kernel.environment%.log"
        additional:
            type: stream
            path: "%kernel.logs_dir%/additional.log"

在这里,我们定义了两个channels:main和additional。主通道仍使用默认的kernel日志文件,而additional通道将日志写入一个名为additional.log的文件中。

步骤2: 注入另一个记录器

现在我们已经在monolog.yaml中定义了额外的通道,我们需要将其注入到我们的服务中。

services:
    _defaults:
        autowire: true
        autoconfigure: true

    App\Service\ExampleService:
        arguments:
            $mainLogger: '@monolog.logger.main'
            $additionalLogger: '@monolog.logger.additional'

在这里,我们创建了一个名为ExampleService的服务,并注入了两个logger:mainLogger和additionalLogger。现在我们可以在ExampleService中使用这些记录器来记录不同的信息。

步骤3: 在代码中使用多个Logger

我们现在可以在我们的服务中使用注入的记录器了。可以使用以下方式记录日志:

class ExampleService
{
    private $mainLogger;
    private $additionalLogger;

    public function __construct(LoggerInterface $mainLogger, LoggerInterface $additionalLogger)
    {
        $this->mainLogger = $mainLogger;
        $this->additionalLogger = $additionalLogger;
    }

    public function doSomething()
    {
        // Log to main logger
        $this->mainLogger->info('Doing something');

        // Log to additional logger
        $this->additionalLogger->info('Doing something additional');
    }
}

在这里,我们可以使用主记录器记录标准信息,而additional记录器可以用于记录更详细的信息。

结论

现在我们已经学习了如何在Symfony中注入多个日志记录器。这使我们可以更好地掌控我们的日志文件,并使用不同的记录器来记录不同的信息。