2017-08-01 5 views
2

J'ai eu un problème étrange en utilisant le service de l'enregistreur dans Symfony 2:Symfony 2 Injecter service enregistreur

Lors de l'injection de l'enregistreur à un service, je reçois une erreur de type parce LoggerInterface prévu, mais Symfony \ pont \ Monologue \ Logger donné .

De plus, si j'essaie d'injecter un enregistreur personnalisé, j'obtiens une erreur en raison d'un service non défini.

Voici mon code:

confiy.yml

monolog: 
channels: ['payment'] 
handlers: 
    paymentlog: 
     type: stream 
     path: "%kernel.logs_dir%/payment.log" 
     level: debug 
     channels: [payment] 

service.yml

#payment_services 
    payment.gateway_payments: 
    class: AppBundle\Service\paymentService 
    arguments: ["@service_container", "@doctrine.orm.entity_manager", "@logger"] 

Service:

<?php 

    namespace AppBundle\Service; 

    use Symfony\Component\DependencyInjection\ContainerInterface; 
    use Doctrine\ORM\EntityManager; 
    use Symfony\Component\HttpKernel\Log\LoggerInterface; 

    class paymentService { 

    private $container; 
    private $em; 
    private $logger; 

    public function __construct(ContainerInterface $container, EntityManager $em, LoggerInterface $logger){ 
    $this->container = $container; 
    $this->em = $em; 
    $this->logger = $logger; 
} 

injection également l'enregistreur avec @monolog. logger.paymentlog est givin g moi une erreur "service non défini"

Quelqu'un peut-il me dire où je me trompe?

THX beaucoup.

+0

Que voulez-vous? Voulez-vous un enregistreur personnalisé pour payment.log? –

+1

Lisez la [documentation] (http://symfony.com/doc/current/reference/dic_tags.html#dic-tags-monolog). Aussi: [This] (http://symfony.com/doc/current/logging.html#using-a-logger-inside-a-service). – ccKep

+0

@ccKep: Merci pour cet indice, après avoir résolu le problème avec mon espace de noms cela a fait l'affaire. Et oui je voulais avoir un enregistreur personnalisé pour le journal de paiement, mais je ne pouvais pas utiliser un canal séparé pour cela, car cela me donnerait des erreurs. – user1827297

Répondre

3

essayez ceci:

use Monolog\Logger; 

au lieu de ceci:

use Symfony\Component\HttpKernel\Log\LoggerInterface; 

Et après cela;

public function __construct(ContainerInterface $container, EntityManager $em, Logger $logger){ 

insetad de ceci:

public function __construct(ContainerInterface $container, EntityManager $em, LoggerInterface $logger){ 
+1

Fermer mais pas de cigare. Vous voulez toujours saisir l'interface LoggerInterface. Ils ont juste besoin d'utiliser l'espace de noms correct. Ils copient/collent un vieux morceau de code. – Cerad

+0

Oui peut-être que vous avez raison @Cerad Je n'ai pas pensé à l'IDE qui génère la mauvaise déclaration d'utilisation. –

+0

@JasonRoman Vous me dites. Assez facile à regarder. – Cerad