Я не могу записывать логи в файл, используя определенный канал с Monolog в Symfony 3.4 - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь записывать журналы в определенный файл, используя определенный канал в Monolog (называемый encuestas_cloud) внутри Команды в Symfony 3.4, но я не могу этого сделать.

Я прочитал документы Symfonyи искал в Интернете, и я думаю, что он хорошо настроен, но я получаю ошибку.

Код:

В config_dev.yml:

monolog:

  handlers:
    main:
        type: stream
        path: '%kernel.logs_dir%/%kernel.environment%.log'
        level: debug
        channels: ['!event']

  ...
    encuestas_cloud_logger:
        #type: rotating_file
        type: stream
        path: 'D:/web/xampp/htdocs/temp/logs/encuestas_cloud.log'
        level: info
        channels: ['encuestas_cloud']   
        max_files: 10       

В службах.yml

services:
  _defaults:
     autowire: true
     autoconfigure: true
     public: false

  AppBundle\Command\EncuestasCloudCommand\:
    resource: '../../src/AppBundle/Command/EncuestasCloudCommand.php'
    arguments: ['@logger']
    public: true
    tags:
        - { name: monolog.logger, channel: encuestas_cloud } 

Команда:

// src/AppBundle/Command/EncuestasCloudCommand.php
namespace AppBundle\Command;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
...

class EncuestasCloudCommand extends ContainerAwareCommand

{
  private $logger;

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

 ...
 protected function execute(InputInterface $input, OutputInterface $output)
 {

    $logger = $this->logger;
    $logger->addInfo('My logger is now ready');

Когда я ее выполняю, я получаю:

В строке LoggerChannelPass.php 98:

Ошибка конфигурации Monolog: Канал регистрации "encuestas_cloud", назначенный обработчику
"encuestas_cloud_logger", не существует.

В строке ContainerBuilder.php 1063:

Вы запросили несуществующую услугу "monolog.logger.encuestas_cloud".

Если я добавлю channels: ['encuestas_cloud'] в config_dev.yml

monolog:
  channels: ['encuestas_cloud'] 

  handlers:
    main:
        type: stream
...

Ошибка исчезнет, ​​но журнал все равно перейдет в общий файл журнала: dev.log

Пожалуйста, кто-нибудь может мне помочь выяснить, что не так с конфигурацией?

Спасибо большое !!!

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Работает ли изменение аргумента вашей команды с @logger на @monolog.logger.encuestas_cloud?Это должно внедрить определенный сконфигурированный регистратор, и поэтому ваше журналирование будет отображаться в правильном регистраторе.

monolog:
  channels: ['encuestas_cloud']

Должен быть определен AFAIK, и явно исключен канал для вашего main регистратора, чтобы там не отображаться:

monolog:
    handlers:
        main:
            ...
            channels: [ '!encuestas_cloud' ]
0 голосов
/ 27 сентября 2019

Большое спасибо evertjes за ваш ответ, это не решило проблему, но помогло мне исследовать другие пути ...

Проблема заключалась в том, что команда не была определенав качестве службы, поэтому Symfony не смог сопоставить канал с этой службой (и с командой).

Я выполнил:

php bin/console debug:container

и службу командыне появился

Итак, после изучения того, как определить команду как службу, конфигурация работала нормально ... уфффф.

Здесь я публикую окончательный код, который работает.

В config_dev.yml:

monolog:
  channels: ['encuestas_cloud']

  handlers:
    main:
        type: stream
        path: '%kernel.logs_dir%/%kernel.environment%.log'
        level: debug
        channels: ['!event','!encuestas_cloud']

  ...
    encuestas_cloud_logger:
        type: rotating_file
        path: 'D:/web/xampp/htdocs/temp/logs/encuestas_cloud.log'
        level: info
        channels: ['encuestas_cloud']   
        max_files: 10       

В services.yml

services:
  _defaults:
     autowire: true
     autoconfigure: true
     public: false

  console.command.encuestas_cloud_command:
    class: 'AppBundle\Command\EncuestasCloudCommand'
    arguments: ['@logger']
    public: true
    tags:
        - { name: monolog.logger, channel: encuestas_cloud }  

Команда:

// src/AppBundle/Command/EncuestasCloudCommand.php
namespace AppBundle\Command;
use Psr\Log\LoggerInterface;
use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
...

class EncuestasCloudCommand extends ContainerAwareCommand

{
  private $logger;

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

 ...
 protected function execute(InputInterface $input, OutputInterface $output)
 {

    $logger = $this->logger;
    $logger->addInfo('My logger is now ready');

Теперь файл создан и журнал отображается с настроенным каналом.

Большое спасибо всем !!!

...