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