/**
  * logging
  *
  * @param {integer} $logLv
  * @param {string} $header
  * @param {string} $data
  */
 public static function logging($logLv, $header = '', $data = '')
 {
     try {
         $options = Atto::getOptions();
         if (!$options || $options['logging_level'] < $logLv) {
             return;
         }
         $files = $options['logging_files'];
         $dir = Atto::dir_var_log();
         $max_byte = $options['logging_MiBbyte'] * 1048576;
         $words = array();
         $words[] = "\n・";
         $words[] = date('Y/m/d H:i:s');
         $words[] = "\t";
         $words[] = $header;
         $words[] = ' : ';
         $words[] = function_exists('json_encode') ? json_encode($data) : var_export($data, true);
         $file_paths = array();
         foreach ($files as $val) {
             $file_paths[] = $dir . $val;
         }
         $idx = 0;
         $near = 0;
         $fTime = 0;
         for ($i = 0, $l = count($file_paths); $i < $l; $i++) {
             if (file_exists($file_paths[$i])) {
                 $fTime = filemtime($file_paths[$i]);
             }
             if ($near < $fTime) {
                 $near = $fTime;
                 $idx = $i;
             }
         }
         if (!file_exists($file_paths[$idx]) || filesize($file_paths[$idx]) + strlen(bin2hex(implode($words))) / 2 <= $max_byte) {
             $file_path = $file_paths[$idx];
             if (file_exists($file_path)) {
                 $mode = 'a';
             } else {
                 $mode = 'w';
                 $words[0] = '・';
             }
         } else {
             $file_path = $idx + 1 < count($file_paths) ? $file_paths[$idx + 1] : $file_paths[0];
             $mode = 'w';
             $words[0] = '・';
         }
         $count = 0;
         while (true) {
             $fp = fopen($file_path, $mode);
             if ($fp == false) {
                 if ($count < 100) {
                     usleep(1000);
                     $count++;
                 } else {
                     return false;
                 }
             } else {
                 break;
             }
         }
         $count = 0;
         while (flock($fp, LOCK_EX) == false) {
             if ($count < 100) {
                 usleep(1000);
                 $count++;
             } else {
                 return false;
             }
         }
         fputs($fp, implode($words));
         flock($fp, LOCK_UN);
         fclose($fp);
     } catch (Exception $e) {
         $e->getMessage();
     }
 }