如何使用php在生產環境封裝一個打印日誌的方法?

如何使用php在生產環境封裝一個打印日誌的方法?

前言

爲防止項目上線後出現問題,不好定位,找不到原因,我們還是要依靠打印日誌文件,找到bug出現的位置,所以,開發過程中,對可能出現錯誤的地方,打印日誌是非常非常重要的一件事情!

封裝LogService類

<?php

/*
 * 日誌類
 * 每天生成一個日誌文件
*/

class LogService
{
    public static function writeLog($data, $dir = '')
    {
    	//默認存放打印日誌的目錄
        $dir_path = __DIR__ . '/logs/';
        if ($dir) {
        	//ltrim移除字符串左側的字符/,這裏統一設置/
            $dir_path .= ltrim($dir, '/');
        }
        
        //檢查當前目錄是否存在
        if (!is_dir($dir_path)) {
            //如果不存在則生成目錄權限爲777
            mkdir($dir_path, 0777, true);
        }
        
        //rtrim移除字符串右側的空白字符或其他預定義字符
        $filepath = rtrim($dir_path, '/') . '/' . date("Ymd") . '.log';
        //設置一個打印日誌的起始文字
        $delimiter_start = "\n+---------------------------- log start -----------------------------+\n記錄時間:" . date("Y-m-d H:i:s") . "\n";
          //設置一個打印日誌的結束文字
        $delimiter_end = "\n+---------------------------- log end -----------------------------+\n";
        //將要打印的文字以json形式,並轉義成中文的格式追加的指定目錄中的日誌文件內
        file_put_contents($filepath, $delimiter_start . json_encode($data, JSON_UNESCAPED_UNICODE) . $delimiter_end, FILE_APPEND);
    }

}

//要打印的數據
$msg = array(
    'name' => '奇葩天地網',
    'url' => 'www.qipa250.com',
    'short_name' => '奇葩250',
);
//靜態函數,不用實例化,可以直接引用方法
LogService::writeLog($msg, 'qipa'); //寫入日誌到logs下的qipa目錄中

?>

file_put_contents介紹

file_put_contents() 函數把一個字符串寫入文件中。

該函數訪問文件時,遵循以下規則:

如果設置了 FILE_USE_INCLUDE_PATH,那麼將檢查 *filename* 副本的內置路徑
如果文件不存在,將創建一個文件
打開文件
如果設置了 LOCK_EX,那麼將鎖定文件
如果設置了 FILE_APPEND,那麼將移至文件末尾。否則,將會清除文件的內容
向文件中寫入數據
關閉文件並對所有文件解鎖

如果成功,該函數將返回寫入文件中的字符數。如果失敗,則返回 False。

語法

int file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] )
參數 描述
file 必填項,指定數據需要寫入的文件名稱,若是文件不存在,則創建
data 必填項,要寫入文件的數據。可以是字符串、數組或數據流。
mode 可選。規定如何打開/寫入文件。可能的值: FILE_USE_INCLUDE_PATH, FILE_APPEND , LOCK_EX
context 可選。規定文件句柄的環境。context 是一套可以修改流的行爲的選項。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章