2017-08-01 90 views
2

我在symfony中2使用記錄器服務一個奇怪的問題:Symfony的2注射記錄器服務

當注射記錄到服務,我得到一個類型錯誤,因爲LoggerInterface預期,但Symfony的\橋\獨白\記錄儀給出。

此外,如果我嘗試注入一個自定義記錄器,我得到錯誤,因爲未定義的服務。

這裏是我的代碼:

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"] 

服務:

<?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; 
} 

而且注射用@monolog記錄器。 logger.paymentlog是givin g我錯誤「undefinded service」

有人可以告訴我我錯在哪裏嗎?

THX很多。

+0

你想幹什麼?您是否想要payment.log自定義記錄器? –

+1

閱讀[documentation](http://symfony.com/doc/current/reference/dic_tags.html#dic-tags-monolog)。另外:[This](http://symfony.com/doc/current/logging.html#using-a-logger-inside-a-service)。 – ccKep

+0

@ccKep:感謝您的提示,在解決了我的命名空間問題之後,這確實實現了。是的,我想有一個自定義記錄器的付款日誌,但不能使用一個單獨的渠道,因爲它會給我錯誤。 – user1827297

回答

3

試試這個:

use Monolog\Logger; 

,而不是這樣的:

use Symfony\Component\HttpKernel\Log\LoggerInterface; 

並在此之後;

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

這個insetad:

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

關閉但沒有雪茄。仍想要輸入提示LoggerInterface。他們只需要使用正確的名稱空間。他們複製/粘貼了一段舊的代碼。 – Cerad

+0

是的,也許你是對的@Cerad我沒有想過IDE會產生錯誤的使用聲明。 –

+0

@JasonRoman你告訴我。很容易查找。 – Cerad