10分ぐらいで学べるSymfony2 〜自分のloggerを設定してみる編〜

なんとなくloggerに慣れてきましたが複数ファイルに出力をだしたい時の設定について、もやもやしてました。
(同じメッセージを複数出力する場合はconfig.ymlのmonolog項目に設定を追加すれば良いですが、apiの入出力値はAファイル、アプリケーションのメッセージはBファイルみたいに用途によって出力を分けたい場合です。)
そんな時にユーザ会のMLでfivestarさんが回答してたのを見かけて、さっそくありがてぇありがてぇと涙しながら学んだメモです。

$ vi app/config/service.yml
    taka512.api.input.logger:
        class: Monolog\Logger
        arguments:
            - api.input
        calls:
            - [ pushHandler, [ @taka512.api.input.logger.handler ] ]

    taka512.api.input.logger.handler:
        class: Monolog\Handler\StreamHandler
        arguments:
            - %kernel.logs_dir%/api_%kernel.environment%_input.log
        public: false

これで「app/logs/api_prod_input.log」にログが出力されます
ちなみにMonolog\Loggerの引数の「api.input」はチャネル名となります

[2011-10-23 23:00:19] api.input.INFO: We just got the logger [] []
[2011-10-23 23:00:19] api.input.ERROR: An error occurred [] []

argumentsの第2引数にログの出力レベルをERROR(400)以上と設定すると400以下のログは出力されなくなります。

    taka512.api.input.logger.handler:
        class: Monolog\Handler\StreamHandler
        arguments:
            - %kernel.logs_dir%/api_%kernel.environment%_input.log
            - %taka512.api.input.logger.level%     # 400とparameter.initで定義

api.input.INFO」のINFOは必要ないとかフォーマットを変えたくなったら以下のように設定

    taka512.logger.formatter:
        class: Monolog\Formatter\LineFormatter
        arguments:
            - "[%%datetime%%] %%channel%%: %%message%%\n"

    taka512.api.input.logger:
        class: Monolog\Logger
        arguments:
            - api.input
        calls:
            - [ pushHandler, [ @taka512.api.input.logger.handler ] ]

    taka512.api.input.logger.handler:
        class: Monolog\Handler\StreamHandler
        arguments:
            - %kernel.logs_dir%/api_%kernel.environment%_input.log
            - %taka512.api.input.logger.level%     # 400とparameter.initで定義
        calls:
            - [ setFormatter, [ @taka512.logger.formatter] ]
        public: false


以上です。ちなみにSwiftMailerHandlerの設定の仕方を知っている人いたら絶賛募集中です。


参考

http://groups.google.com/group/symfony-users-ja/browse_thread/thread/b4e3e5bd9e29b19c