예제 #1
0
파일: logger.php 프로젝트: 2626suke/curryfw
 /**
  * Execute log rotation
  * 
  * @param string $fileName
  * @return void
  */
 private static function _rotate($fileName)
 {
     $dirPath = PathManager::getLogDirectory();
     // get file list in log directory
     $dir = dir($dirPath);
     $generations = array();
     while ($content = $dir->read()) {
         $path = sprintf("%s/%s", $dirPath, $content);
         if (!is_file($path)) {
             // ignore directory
             continue;
         }
         $info = pathinfo($path);
         $name = $info['basename'];
         if (!preg_match(sprintf('|^%s(\\.[0-9]+)?$|', $fileName), $name)) {
             // ignore not match log name
             continue;
         }
         $generation = trim(str_replace($fileName, '', $name), '.');
         if ($generation == '') {
             $generation = 0;
         }
         if ($generation >= self::$_generation - 1) {
             // delete if rotate num is over generation setting
             @unlink($path);
         } else {
             $generations[] = $generation;
         }
     }
     // increment log extension as rotate num
     rsort($generations);
     foreach ($generations as $gene) {
         $oldName = sprintf('%s/%s.%s', $dirPath, $fileName, $gene);
         $newName = sprintf('%s/%s.%s', $dirPath, $fileName, $gene + 1);
         @rename($oldName, $newName);
     }
     $filePath = sprintf("%s/%s", $dirPath, $fileName);
     @rename($filePath, $filePath . '.1');
     $dir->close();
 }