642
技術社區[雲棲]
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