カスタムタスクでログをローテート

カスタムタスクの作り方。
sfLogManager が rotate してくれないの続き。

カスタムタスクを作れば、
symfony my-log-rotate
で、ログがローテーションできる。


まず、タスクファイルを作成する。
タスクファイルは、
[プロジェクトフォルダ]/data/tasks/myPakeMisc.php
とする。
ファイル名は myPake*.php であれば何でもよい。

内容はこんな感じに。

<?php

pake_desc('rotates an applications log files');
pake_task('my-log-rotate', 'app_exists');

function run_my_log_rotate($task, $args)
{
  // handling two required arguments (application and environment)
  if (count($args) < 2)
  {
    throw new Exception('You must provide the environment of the log to rotate');
  }
  $app = $args[0];
  $env = $args[1];

  // define constants
  define('SF_ROOT_DIR',    sfConfig::get('sf_root_dir'));
  define('SF_APP',         $app);
  define('SF_ENVIRONMENT', $env);
  define('SF_DEBUG',       true);

  // get configuration
  require_once SF_ROOT_DIR.DIRECTORY_SEPARATOR.'apps'.DIRECTORY_SEPARATOR.SF_APP.DIRECTORY_SEPARATOR.'config'.DIRECTORY_SEPARATOR.'config.php';

  myLogManager::rotate($app, $env, sfConfig::get('sf_logging_period'), sfConfig::get('sf_logging_history'), true);
}

symfony オリジナルの log-rotate の sfLogManager を myLogManager にしただけ。
myLogManager はの詳細はこちら
オリジナルの log-rotate は、SF_SYMFONY_DATA_DIR/tasks/sfPakeMisc.php にあり。

symfony
で、タスクリストに my-log-rotate が表示されれば成功。

symfony my-log-rotate frontend prod
などで、myLogManager バージョンのタスクが実行される。
これで、ログのローテーション問題は解決。

2012年11月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30  

アーカイブ