気ままなDevLog

webとかプログラミングについての雑記帳

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;
        }
      }
    }
  }

これで日付も出るようになりました。

あと心配なのはまだ動作確認できてないログローテーションだけだな。