首頁  >  文章  >  後端開發  >  淺談php自訂錯誤日誌

淺談php自訂錯誤日誌

高洛峰
高洛峰原創
2016-12-23 15:41:431208瀏覽

我認為有兩個原因:

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 = &#39;&#39;;
    switch ($errno) {
    case E_USER_ERROR:
        $template .= "用户ERROR级错误,必须修复 错误编号[$errno] $errstr ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
        $log_file = sprintf($log_file,&#39;error&#39;);
        exit(1);//系统退出
        break;
    case E_USER_WARNING:
        $template .= "用户WARNING级错误,建议修复 错误编号[$errno] $errstr ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
        $log_file = sprintf($log_file,&#39;warning&#39;);
        break;
    case E_USER_NOTICE:
        $template .= "用户NOTICE级错误,不影响系统,可不修复 错误编号[$errno] $errstr ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
    $log_file = sprintf($log_file,&#39;notice&#39;);
        break;
    default:
        $template .= "未知错误类型: 错误编号[$errno] $errstr  ";
        $template .= "错误位置 文件$errfile,第 $errline 行\n";
        $log_file = sprintf($log_file,&#39;unknown&#39;);
        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中文網!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn