在做ecshop時發現沒有順手的打印日誌的地方,就去把thinkphp裏輸出日誌的地方簡單的拆了出來,代碼如下:
/**
* 日誌直接寫入
* @static
* @access public
* @param string $message 日誌信息
* @param string $level 日誌級別
* @param integer $type 日誌記錄方式
* @param string $destination 寫入目標
* @param string $extra 額外參數
* @return void
*/
function log_write($message,$level='debug',$type='',$destination='',$extra='') {
$format = '[ c ]';
$log_file_size = '2097152';
$now = date($format);
$type = $type?$type:3;
if(3 == $type) { // 文件方式記錄日誌
$log_path = ROOT_PATH . 'data/log/';
if(!is_readable($log_path))
{
is_file($log_path) or mkdir($log_path,0700);
}
if(empty($destination))
$destination = $log_path.date('y_m_d').'.log';
//檢測日誌文件大小,超過配置大小則備份日誌文件重新生成
if(is_file($destination) && floor($log_file_size) <= filesize($destination) )
rename($destination,dirname($destination).'/'.time().'-'.basename($destination));
}
error_log("{$now} {$level}: {$message}\r\n", $type,$destination,$extra );
}
備註下 error_log函數,發送一個錯誤信息到Web服務器的錯誤日誌,一個TCP的端口或者是一個文件:
需要先開啓,編輯php.ini,將log_errors設置爲on:
log_errors = On,一般默認都開啓了
可能的信息類型有以下幾個:
0 message 發送到 PHP 的系統日誌。 這是個默認的選項。iis服務器運行調試php程序錯誤信息生成log文件在哪裏。
1 message 發送到參數 destination 設置的郵件地址。 第四個參數 extra_headers 只有在這個類型裏纔會被用到。
2 不再是一個選項。
3 message 被髮送到位置爲 destination 的文件裏。 字符 message 不會默認被當做新的一行,而是追加到行末。
4 message 直接發送到 SAPI 的日誌處理程序中。
destination 目標。它的含義描述於以上,由 message_type 參數所決定。
extra_headers 額外的頭。當 message_type 設置爲 1 的時候使用。 該信息類型使用了 mail() 的同一個內置函數。
返回值 成功時返回 TRUE, 或者在失敗時返回 FALSE。
這裏設置的就是3,將日誌發送到文件裏。