我認為有兩個原因:
1.團隊需要一個統一格式的日誌方便管理
2.大量無用錯誤日誌佔據硬碟空間,僅需記錄有意義的日誌。
那麼,實作一下。
1.打開你的php.ini
2.打開日誌記錄,將
log_errors = Off
改成
log_errors = On
3.將php.ini保存退出並重啟web伺服器
4.在你的程式碼最前面加上如下程式碼
<?php //错误处理函数 function myErrorHandler($errno, $errstr, $errfile, $errline) { $log_file = "./php_%s_log_".date("Ymd").".log";//定义日志文件存放目录和文件名 $template = ''; switch ($errno) { case E_USER_ERROR: $template .= "用户ERROR级错误,必须修复 错误编号[$errno] $errstr "; $template .= "错误位置 文件$errfile,第 $errline 行\n"; $log_file = sprintf($log_file,'error'); exit(1);//系统退出 break; case E_USER_WARNING: $template .= "用户WARNING级错误,建议修复 错误编号[$errno] $errstr "; $template .= "错误位置 文件$errfile,第 $errline 行\n"; $log_file = sprintf($log_file,'warning'); break; case E_USER_NOTICE: $template .= "用户NOTICE级错误,不影响系统,可不修复 错误编号[$errno] $errstr "; $template .= "错误位置 文件$errfile,第 $errline 行\n"; $log_file = sprintf($log_file,'notice'); break; default: $template .= "未知错误类型: 错误编号[$errno] $errstr "; $template .= "错误位置 文件$errfile,第 $errline 行\n"; $log_file = sprintf($log_file,'unknown'); break; } file_put_contents($log_file,$template,FILE_APPEND); return true; } $error_handler = set_error_handler("myErrorHandler");//开启自定义错误日志
5.試著在剛才的程式碼後寫下一段錯誤碼
echo 1/0;
看看你定義的路徑下是否多了一個日誌檔呢? :)
註:以下層級的錯誤不能由使用者定義的函數來處理: E_ERROR、 E_PARSE、 E_CORE_ERROR、 E_CORE_WARNING、 E_COMPILE_ERROR、 E_COMPILE_WARNING,和在 呼叫 set_error_handler() 函數所在檔案中產生的大多數 E_STR.
不過當你開啟了錯誤日誌系統(php.ini中的log_error = on)並且指定了系統日誌檔案(同樣也是php.ini中的error_log=路徑名),並且error_reporting開啟了全部後,以上的錯誤都會作為系統錯誤日誌而記錄在你定義的檔案中。
以上就是本文所述的全部內容了,希望大家能對php自訂錯誤日誌有新的認識。
更多淺談php自訂錯誤日誌相關文章請關注PHP中文網!