我們要寫一個寫日志的函數,首先需要了解需求,我們一般怎么用日志函數呢?例如,程序執行到某一步,我希望把這個變量(地址)$user_address的值打印到日志,我們希望日志里是這么寫的:
`xx-xx-xx xx:xx $user_address : 上海市楊浦區xxxxx
然后每一條日志都要換行,都有日期時間,
假設 函數名稱是log();
我們希望這么調用他 log(‘useraddress:user_address);
那如果$user_address 是一個數組,我想把一個數組的全都都輸出到日志中,該怎么辦呢?
有一個函數是print_r($arg,true),第二個參數表示不直接輸出,而是輸出的結果作為返回值.我們知道他的輸出結果為一段字符串.
log函數可以這么寫:
log(){$args=?func_get_args();//獲得傳入的所有參數的數組
$numargs=?func_num_args();//參數的個數
if($numargs==0)?{
$log="";
}?elseif($numargs==1)?{
$log=$args[0];
}else{$format=array_shift($args);//分割掉函數第一個元素,并且做返回值返回,
'$user_address:%s'$log=?vsprintf($format,$args);//把參數代入$format中,}$log=date("[Y/m/d?H:i:s]?")?.$log.?PHP_EOL;//加上時間$file='/usr/share/nginx/html/log.log'$fp=fopen($file,'a');fwrite($fp,$log);fclose($fp);returntrue;
}
用法:
1.打印一般變量$a,
log('得到了$a的值:%s',$a );
2 . 打印一個數組$arr
log('%s',print_r($arr,true));
可以對上面的函數進行改進下:
functionlog2($arg){$log=?vsprintf('%s',?print_r($arg,true));$log=date('[Y/m/d?H:i:s]')?.'—'.$log.?PHP_EOL;$path=?dirname(__FILE__)?.'/log.log'$fp=file_put_contents($path,$log,?FILE_APPEND);returntrue;?}$a=[1,23,45,45];?log2($a);