美文网首页
日志文件整理小程序(PHP)

日志文件整理小程序(PHP)

作者: 全栈coder | 来源:发表于2016-11-02 21:29 被阅读334次

    /*
    请将日志文件20150710.log按照时间对每行进行排序,如果时间已经出现过一次,再出现相同的时间用"\t"替换。(日志文件第一列为时间戳)

    20150710.log内容如下:
    22367614 [info] 0.00 OK 0
    22367611 [debug] 0.00 TEST 0
    22367613 [info] 0.00 OK 0
    22367613 [info] 2.44 OK 0
    22367614 [info] 2.44 OK 0
    22367612 [debug] 2.44 TEST 0
    22367618 [error] 2.44 NULL 0
    22367617 [info] 2.44 OK 0
    22367618 [error] 2.44 NULL 0
    22367610 [error] 2.44 NULL 0
    22367613 [info] 2.44 OK 0
    22367611 [info] 2.44 OK 0
    22367612 [info] 2.44 OK 0
    22367619 [info] 2.44 OK 0
    22367618 [debug] 2.44 TEST 0
    22367617 [debug] 2.44 NOTICE 0
    22367610 [info] 2.44 OK 0
    22367617 [error] 2.44 NULL 0
    22367615 [info] 2.44 OK 0
    22367614 [info] 2.44 OK 0

    应写入sh20150710.dat的内容如下:
    22367610 [error] 2.44 NULL 0
    [info] 2.44 OK 0
    22367611 [debug] 0.00 TEST 0
    [info] 2.44 OK 0
    22367612 [debug] 2.44 TEST 0
    [info] 2.44 OK 0
    22367613 [info] 0.00 OK 0
    [info] 2.44 OK 0
    [info] 2.44 OK 0
    22367614 [info] 0.00 OK 0
    [info] 2.44 OK 0
    [info] 2.44 OK 0

    22367615 [info] 2.44 OK 0
    22367617 [info] 2.44 OK 0
    [debug] 2.44 NOTICE 0
    [error] 2.44 NULL 0
    22367618 [error] 2.44 NULL 0
    [error] 2.44 NULL 0
    [debug] 2.44 TEST 0
    22367619 [info] 2.44 OK 0
    */

    以下为程序函数

    第一步:

     /**
      * [load 函数 把日志文件的每一行写入数组并返回]
      */
    function load($file) {  
      //打开日志文件
       $handle = fopen($file,'r') or die('打开文件失败');
    
      //循环读取文件的每一行,并写入数组
       while (!feof($handle)) {
           $lines[]=fgets($handle,'4096');
       }
    
      //关闭打开的文件资源
       fclose($handle);
    
      //返回数组
    return $lines;
    
    }
    

    第二步:

     /** 
      * [eliminate 函数 对日志文件每一行读取的日志依照时间戳进行分类,出现相同的时间用"\t"替换] 
      */
    function eliminate($lines) {  
       //定义一个新的数组
       $new = array();
    
       //对传递过来的数组参数循环每一行日志
       foreach($lines as $line)  {
          //切割出每一行日志的时间戳,并用list语句赋值给$dul
          list($dul,) = explode("\t", $line, 2);
          //判断时间戳是否重复
          if(isset($new[$dul])) {
             //如果重复用“\t”也就是文本文档的空格代替,形成二维数组
              $line = str_replace($dul,"\t",$line);
           }
         //对每一行日志,按照时间戳分类,放入同一数组下
         $new[$dul][] = $line;
        }
     //返回二维数组,数组的键为时间戳
      return $new;
    }
    

    第三步:

    /**
     * [usort description]
     * @param  [数组] $new [需要排序的二维数组]
     * @param  [字符串] $filename [需要写入的文件文件名]
     */
    function qsort($new,$filename) {
       $tmp ='';
       //对二维数组排序
       ksort($new);
       //双重循环把排好序的日志行写入到字符串中
       foreach ($new as  $values) {
          foreach ($values as  $value) {
                $tmp .= $value."\r\n";
          }
       }
       //把字符串写入到文件中
       file_put_contents("$filename",$tmp);
    }
    

    相关文章

      网友评论

          本文标题:日志文件整理小程序(PHP)

          本文链接:https://www.haomeiwen.com/subject/fygvuttx.html