小白折騰伺服器(五):自己寫個記錄日誌的小方法,解決使用 supervisor 後日志堆疊

aen233發表於2019-01-31

題記:這篇主要是因為困擾了很久的一個問題,沒有找到好方法,就只能用笨辦法了。

laravel的日誌設定的是daily模式,就是每天的日誌檔案分開,使用supervisor後,日誌堆積在supervisor啟動程式的一天裡了
怎麼解決呢?

在helpers函式中建一個方法

if (!function_exists('iuLog')) {
    /**
     * @param        $level
     * @param        $desc
     * @param array  $data
     * @param string $filename
     */
    function iuLog($level, $desc = '', $data = [], $filename = '')
    {
        $logPath = storage_path() . '/logs/' . date('Y/m/');

        if (!file_exists($logPath)) {
            mkdir($logPath, 0777, true);
        }
        $filename = $filename ?: date('d') . '-iu';

        $dir = $logPath . $filename . '.log';
        if ($level == PHP_EOL) {
            file_put_contents($dir, PHP_EOL, FILE_APPEND);

            return;
        }
        $prefix = '[' . now() . '] ' . env('APP_ENV') . '.' . strtoupper($level) . ': ';

        if (!$data) {
            file_put_contents($dir, $prefix . $desc . PHP_EOL, FILE_APPEND);

            return;
        }
        //            JSON_UNESCAPED_UNICODE(中文不轉為unicode ,對應的數字 256)
        //            JSON_UNESCAPED_SLASHES(不轉義反斜槓,對應的數字 64)
        //            JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES = 320
        file_put_contents($dir, $prefix . $desc . json_encode($data, 320) . PHP_EOL, FILE_APPEND);
    }
}

使用:

        iuLog('debug', 'Request Url: ' . $request->url());
        iuLog('debug', 'Request Method: ' . $request->method());
        iuLog('debug', 'Request Params: ', $request->all());
        iuLog(PHP_EOL);

        // 對比laravel 的 Facade 方法

        Log::debug('Request Url: '.$request->url());
        Log::debug('Request Method: '.$request->method());
        Log::debug('Request Params: '.json_encode($request->all()));

效果:

感興趣的小夥伴可以點選檢視:dev環境根目錄就是當前日期的日誌
file

後記:

1.新學的知識點,json_encode同時使用2個常量

php格式化json的函式json_encode($value,$options)
其中有2個比較常用到的引數
JSON_UNESCAPED_UNICODE(中文不轉為unicode ,對應的數字 256)
JSON_UNESCAPED_SLASHES(不轉義反斜槓,對應的數字 64)
通常json_encode只能傳入一個常量,如果同時使用2個常量怎麼辦?
JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES = 320
使用方法:json_encode($arr,320);即可完成同時使用2個常量。

參考連結: PHP json_encode裡面經常用到的 JSON_UNESCAPED_UNICODE和JSON_UNESCAPED_SLASHES

2.這肯定不是最佳解決方案,再翻底層程式碼吧- -如果有知道的小夥伴,求教下....

相關文章