首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP error_log() 函數完整指南:四種訊息類型、自訂錯誤日誌路徑與最佳實務

     編輯:PHP 綜合知識

詳細說明 PHP error_log() 函數的四種訊息類型參數、自訂日誌檔案路徑、郵件發送、系統日誌等輸出目的地,並提供生產環境除錯實戰範例與最佳實務建議。

函數原型

bool error_log(string $message, int $message_type = 0, string $destination = '', string $extra_headers = '')

四種訊息類型

類型參數值輸出目的地說明
00PHP 系統錯誤日誌依 php.ini error_log 設定,或 Web Server 錯誤日誌
11Email 郵件發送至 $destination 指定信箱,需 $extra_headers 設定 From/Subject
33自訂檔案追加寫入 $destination 指定檔案路徑
44SAPI 日誌直接輸出至 Web Server (Apache/Nginx) 錯誤日誌流

實戰範例:記錄 POST 資料除錯

<?php
if (!empty($_POST)) {
    foreach ($_POST as $key => $val) {
        // 類型 3:寫入自訂日誌檔
        error_log("[$key] => $val", 3, '/var/log/myapp/post_debug.log');
    }
}
?>

進階:結構化日誌(JSON 格式)

<?php
function log_debug(array $context, string $message = '') {
    $entry = [
        'time' => date('c'),
        'ip' => $_SERVER['REMOTE_ADDR'] ?? 'cli',
        'uri' => $_SERVER['REQUEST_URI'] ?? '',
        'message' => $message,
        'context' => $context,
    ];
    error_log(json_encode($entry, JSON_UNESCAPED_UNICODE) . "\n", 3, '/var/log/myapp/debug.log');
}

// 使用
log_debug($_POST, '收到表單提交');
log_debug(['user_id' => 123, 'action' => 'purchase'], '用戶購買');
?>

類型 1:郵件發送範例

<?php
$msg = "嚴重錯誤:資料庫連線失敗\n時間: " . date('c');
$headers = "From: system@example.com\r\nSubject: [ALERT] 系統錯誤通知";
error_log($msg, 1, 'admin@example.com', $headers);
?>

最佳實務建議

  1. 區分環境:開發環境用類型 0/4 輸出到螢幕/系統日誌;生產環境用類型 3 寫入專屬日誌檔,避免洩露敏感資訊。
  2. 日誌輪轉:配合 logrotate 定期切割、壓縮、清理舊日誌,防止磁碟爆滿。
  3. 權限管理:日誌目錄需 Web Server 使用者可寫入(如 www-data),建議 chmod 755 目錄、644 檔案。
  4. 避免阻塞:大量日誌寫入考慮非同步(如 Monolog + Redis/RabbitMQ)或批次寫入。
  5. 敏感資料過濾:記錄前移除密碼、Token、信用卡號等敏感欄位。
  6. 統一使用日誌庫:生產專案建議採用 Monolog(PSR-3 相容),支援多處理器、格式化器、處理器鏈。

常見問題排查

  • 日誌不寫入:檢查路徑是否存在、權限、open_basedir 限制、磁碟空間。
  • 亂碼:確保 PHP 檔案、日誌檔案、終端機編碼皆為 UTF-8,使用 JSON_UNESCAPED_UNICODE。
  • 類型 1 郵件不發送:確認 php.ini SMTP/sendmail_path 設定正確,檢查郵件佇列。

善用 error_log() 並配合結構化日誌、輪轉策略,能大幅提升問題排查效率與系統可觀測性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved