閱讀642 返回首頁    go 技術社區[雲棲]


php之框架增加日誌記錄功能類

<?php

/*
思路:給定文件,寫入讀取(fopen ,fwrite……)

  如果大於1M 則重寫備份
  
  傳給一個內容,
  判斷大小,如果大於1M,備份
  小於則寫入
*/
class Log{

	//定義一個常量,創建一個文件的名稱
	const LOGFILE = 'curr.log';
	
	//寫入文件
	public static function write($cont){
		$cont .="\r\n";
		$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 "執行完畢";



 

最後更新:2017-04-02 22:15:57

  上一篇:go linq to sql插入操作取回自增的ID
  下一篇:go 蘋果攜VMware為iPad打造企業雲計算版iWork