sfAdvancedLoggerPluginを使ってみる
symfonyに標準搭載されているloggerが貧弱なので、「symfonyで開発日記」で紹介されていたsfAdvancedLoggerPluginを使ってみます。
http://blog.symfony.jp/2008/04/17/logging/
システム全体で同じ設定でログを吐きたいので、project_root/config/logging.ymlを作成し以下のように設定。
製品環境はnotice以上、開発環境などはdebug以上すべて吐き出すようにする。
(開発環境でメールが大量のメールが飛ぶことが予想されるがw、とりあえず動作確認の意味を込めて開発でもメール通知することに)
prod: enabled: on level: notice rotate: on period: 7 history: 5 purge: off loggers: sf_file_debug: class: sfAdvancedLogger param: php_level: 855 exception: on email: - min_level: 3 to: myaccount@localhost from: symfony sfAdvencedLogger subject: “symfony project Alert Mail” file: - min_level: 5 file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%_symfony.log - type: [PHP, Exception] file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%_php_exception.log all: enabled: on level: debug rotate: on period: 1 history: 7 purge: on loggers: sf_file_debug: class: sfAdvancedLogger param: php_level: 855 exception: on email: - min_level: 3 to: myaccount@localhost from: symfony sfAdvencedLogger subject: “symfony project Alert Mail” file: - min_level: 8 file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%_symfony.log - type: [PHP, Exception] file: %SF_LOG_DIR%/%SF_APP%_%SF_ENVIRONMENT%_php_exception.log
忘れずにsymfony cc
これでログは吐かれるようになったんだけど、吐かれたログを見ると日付が入ってない。。。
いつ発生したかわかんないんじゃぜんぜん実用的じゃなくね?
すでに提供されているものに手を入れるのはあまり好きではないのだが、
仕方なくsfAdvancedLoggerPlugin自体に手を入れることに。
public function log($message, $priority, $priorityName) { ・ ・ ・ // タイムスタンプ取得 $timestamp = date('Y-m-d H:i:s'); switch ($log['log_type']) { case 'email': // メッセージの先頭にタイムスタンプを挿入 $log['messages'][] = " $priorityName - $message"; break; case 'file': // メッセージの先頭にタイムスタンプを挿入 file_put_contents($log['file'], "$timestamp - $priorityName - $message\n", FILE_APPEND | LOCK_EX); break; } } } }
これで日付も出るようになりました。
あと心配なのはまだ動作確認できてないログローテーションだけだな。