2017-05-04 16 views
2

、私はDI注入およびオートワイヤリングと私のサービスに、これらのサービスを注入することができますどのように次の名前monolog.logger.<channel_name>symfonyのオートワイヤリングのモノローグチャネル

でサービスを作成する多くのチャネルを作成することができますか?

class FooService 
{ 
    public function __construct(LoggerInterface $loggerInterface) { } 
} 

YAML

#existing 
foo_service: 
    class: AppBundle\Services\FooService 
    arguments: ["@monolog.logger.barchannel"] 
# what I want to do 
foo_service: 
    autowire: true # how to inject @monolog.logger.barchannel ? 
+0

以前の料理の本エントリはちょうどそれを説明する:[サービス内のロガーを使用](http://symfony.com/doc/current/logging.html#using-a-logger-inside-a -service)の例については、[monolog.logger](http://symfony.com/doc/current/reference/dic_tags.html#monolog-logger)を参照してください。 – ccKep

+2

私が知っている限り、あなたは現時点でそれを行うことはできません:((Symfony 3.3))それは、Setter上でDIを持つといいでしょう。そのパラメータは、 "@monolog.logger.custom_channel私が現時点で行っていることは、ロガーのカスタムクラスを作成し、 "@ monolog.logger.custom_channel"を注入し、ロガーを使用するクラスでオートワイヤリングを使用することです。そうすれば、DIセッターfunctionallityは将来適応されますが、autowiringはメインクラスにとどまります。 –

答えて

0

私はとてもロガーチャンネルをautowireする方法を見つけることができませんでした。しかし、autowireを原則としてで使用し、手動でロガーを注入する方法が見つかりました。あなたのclass FooServiceでは、これはservices.ymlは(symfonyの3.3)のように見えることができるかです:

# services.yml 

services: 
    _defaults: 
     autowire: true 
     autoconfigure: true 
    AppBundle\Services\FooService: 
     arguments: 
      $loggerInterface: '@monolog.logger.barchannel' 

だから、「トリック」はまだオートワイヤリングを介して注入本サービスの他のすべての依存関係を持ちながら、明示的にロガーチャネルを注入することです。

0

いくつかの検索の後、私はタグを使用していくつかの種類の回避策を見つけ、手動でいくつかのパラメータをautowiredサービスに注入しました。

私の答えは@ Thomas-Landauerと似ています。違いは、私は手動でロガーサービスを作成する必要はないということです。

services: 
    _defaults: 
     autowire: true 
     autoconfigure: true 
    AppBundle\Services\FooService: 
     arguments: 
      $loggerInterface: '@logger' 
     tags: 
      - { name: monolog.logger, channel: barchannel } 
関連する問題