• php之框架增加日志记录功能类


    <?php
    
    /*
    思路:给定文件,写入读取(fopen ,fwrite……)
    
      如果大于1M 则重写备份
      
      传给一个内容,
      判断大小,如果大于1M,备份
      小于则写入
    */
    class Log{
    
    	//定义一个常量,创建一个文件的名称
    	const LOGFILE = 'curr.log';
    	
    	//写入文件
    	public static function write($cont){
    		$cont .="
    ";
    		$log = self::isBak(); //计算文件的地址,判断大小
    		$fh = fopen($log,'ab'); //打开,追加模式
    		fwrite($fh,$cont);
    		fclose($fh);
    	}
    	
    	//备份日志
    	public static function bak(){
    		//给出写入文件的路径,把原来的日志
    		//改为年月日 .bak 的形式
    		$log = ROOT .'data/log/'. self::LOGFILE;
    		$bak = ROOT .'data/log/'.date('Ymd') .mt_rand(10000,99999). '.bak';
    		
    		return rename($log,$bak);	
    	
    	}
    	
    	//判断日志是否大于1M
    	public static function isBak(){
    		//判断文件是否存在
    		$log = ROOT .'data/log/'. self::LOGFILE;
    		if(!file_exists($log)){
    		//如果不存在,则创建该文件
    			touch($log); // touch在linux也有此命令,是快速的建立一个文件
    			return $log;
    		}
    		
    		//判断大小
    		clearstatcache(true,$log); //清除缓存,则创建.bak文件
    		$size = filesize($log);
    		
    		if($size <= 1024*1024){ 
    			//如果<=1M 则写入
    			return $log;
    		} 
    			//到这一行,说明大于1M
    		if(!self::bak()){
    			return $log;
    		} else {
    			touch($log);
    			return $log;
    		}
              }
    }
    
    ?>

    极端法测试调用,循环执行10000次

    //另起页面
    //引入日志功能类
     class mysql{
    	public function query($sql){
    		Log::write($sql);
    	}
     }
    $mysql= new mysql();
    /**/
    for($i=0;$i<10000;$i++){
    	$sql='select goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goodsselect goods_id,goods_name,shop_price from goods where goods_id='.rand(10000,99999);
    	$mysql->query($sql);
    }
    
    Log::write('记录');
    echo "执行完毕";

  • 相关阅读:
    996工作制是奋斗还是剥削?
    动态链接的PLT与GOT
    The Product-Minded Software Engineer
    缓冲区溢出
    golang的加法比C快?
    C errno是否是线程安全的
    golang 三个点的用法
    GDB 单步调试汇编
    为什么CPU需要时钟这种概念?
    fliebeat配置手册
  • 原文地址:https://www.cnblogs.com/wang1204/p/5570011.html
Copyright © 2020-2023  润新知