2017-01-05 5 views
3

私は別のチャンネルのロガーを別のファイルに設定しましたが、私にとってはうまくいきません。それは仕事ですが、尖ったファイルではなくコンソールに書き出します。 そして、チャンネル検索でログをファイルに書き込む必要があります。ここで が私のコードです:Symfony 3のログインに不都合なもの

#app/config/config_dev.yml 
monolog: 
    handlers: 
     search: 
      type: stream 
      level: error 
      path: "%kernel.logs_dir%/search_log.log" 
      channels: [search] 
     main: 
      type: stream 
      path: "%kernel.logs_dir%/%kernel.environment%.log" 
      level: debug 
      channels: [!event, !search] 
     console: 
      type: console 
      channels: [!event, !doctrine, !search] 

定義されたサービス:

#MyBundle/Resources/config/services.yml 
services: 
    app.logger_search: 
      class: Symfony\Bridge\Monolog\Logger 
      arguments: ["@logger"] 
      tags: 
       - {name: monolog.logger, channel: search} 

今、サービスを使用し、それをテストしよう:

#MyController.php 

/** 
* @Route("/test") 
*/ 
public function test() 
{ 
    $this->get("app.logger_search")->error("Test"); 

    return $this->json("test"); 
} 

しかし、それはファイルのinstedコンソールに書き込みます。 コンソール私はサーバをどこで実行したのですか:php bin\console server:run

答えて

3

独自のチャンネルを作成これは、configurationまたはby tagging your servicemonolog.loggerで行われ、サービスがログするチャネルを指定します(完了したのと同じです)。

どちらの方法が有効であり、両方のケースであなたはロガーが命名されます。

monolog.logger.<you-channel-name> 

だから、問題を修正する代わりに、あなたのサービスID app.logger_searchmonolog.logger.searchを使用しています。

あなたは私がconfigure additional channels without tagged servicesに勧め、ロガーの動作を変更するための強力な理由を持っていないI:これにより

# app/config/config.yml 
monolog: 
    channels: ['foo', 'bar'] 

を、あなたは今、自動的に登録されたロガーを使用してfooチャネルにログメッセージを送信することができますサービスmonolog.logger.foo

+1

私は自分のクラスの各チャンネルに新しいインスタンスを作成する必要があると理解しましたか? 例: private $ loggerSearch; private $ logger; または私は別の方法で何かできますか? – Haygo

+0

他の方法でやり直すべきでしょうか。私は自分の答えを更新しました。 – yceruto

+0

ありがとうございました。はい、私はそれを使用する場合はどのように各チャネルのログファイルにユニークなpthを与えることができますか? – Haygo

関連する問題