我們要寫一個寫日志的函數,首先需要了解需求,我們一般怎么用日志函數呢?例如,程序執行到某一步,我希望把這個變量(地址)$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);
新聞熱點
疑難解答