Symfony2が独自のログとシステムログを書き込むファイルとは別のファイルにアプリケーションログを書き込みたい。私はこのような自分のサービスを作成する必要があることを理解しました:
services:
actionslogger:
class: Symfony\Bridge\Monolog\Logger
arguments: [app]
calls:
- [pushHandler, [@actionslogger_handler]]
actionslogger_handler:
class: Monolog\Handler\StreamHandler
arguments: [%kernel.logs_dir%/actions_%kernel.environment%.log, 200]
$ logger = $ this-> get('actionslogger');を使用すると、これで問題なく動作します。私のアプリケーションでは、それで問題ありません。しかし、ログの書き込み方法を管理するために、フォーマッターとプロセッサーも使用したいと思います。これを行うには、次の構成を使用します。
services:
actionslogger.formatter.session_request:
class: Monolog\Formatter\LineFormatter
arguments:
- "[%%datetime%%] [%%extra.token%%] %%channel%%.%%level_name%%: %%message%%\n"
actionslogger.processor.session_request:
class: My\Bundle\LogProcessor
arguments: [ @session ]
tags:
- { name: actionslogger.processor, method: processRecord }
この設定でSymfony2のデフォルトロガーでこのフォーマッターとプロセッサーを使用できます:
monolog:
handlers:
main:
type: stream
path: %kernel.logs_dir%/%kernel.environment%.log
level: debug
formatter: actionslogger.formatter.session_request
しかし、自分のロガーでフォーマッターを使用できる場合、プロセッサーは使用できません。これが私の設定です:
services:
actionslogger.formatter.session_request:
class: Monolog\Formatter\LineFormatter
arguments:
- "[%%datetime%%] [%%extra.token%%] %%channel%%.%%level_name%%: %%message%%\n"
actionslogger.processor.session_request:
class: My\Bundle\LogProcessor
arguments: [ @session ]
tags:
- { name: actionslogger.processor, channel: app, method: processRecord, handler: @actionslogger_handler }
actionslogger:
class: Symfony\Bridge\Monolog\Logger
arguments: [app]
calls:
- [pushHandler, [@actionslogger_handler]]
actionslogger_handler:
class: Monolog\Handler\StreamHandler
arguments: [%kernel.logs_dir%/actions_%kernel.environment%.log, 200]
calls:
#- [pushProcessor, [???]]
- [setFormatter, [@actionslogger.formatter.session_request]]
プロセッサの設定のタグチャネルとハンドラは役に立たないようです。
プロセッサをロガーで動作させるにはどうすればよいですか?コメント行のpushProcessorメソッドに何を渡す必要がありますか(それが有効なオプションである可能性がある場合)?
助けてくれてありがとう。
注:Symfony2.0.0を使用する