Categories: PHP

PHP 錯誤、警告、通知訊息寫入 Log 記錄檔教學與範例

介紹如何在 PHP 中使用 error_logsyslog 將各種錯誤、警告或通知訊息寫入系統設定檔中。

error_log 記錄錯誤訊息

PHP 的 error_log 函數可以用來將錯誤訊息寫入記錄檔,以下是使用範例。

# 將錯誤訊息寫入系統記錄檔
error_log("Error message.")

error_log 預設會將訊息遞送至 PHP 的 logger,跟 PHP 系統的訊息一起存入 error_log 所指定的位置。

若要將錯誤訊息直接以 Email 寄送至指定信箱,可以將第二個訊息類型參數設定為 1,並在第三個參數指定 Email 信箱:

# 將錯誤訊息以 Email 寄送至指定信箱
error_log("Error message.", 1, "admin@example.com");

若要將錯誤訊息儲存至指定的檔案中,可以將第二個訊息類型參數設定為 3,並在第三個參數指定記錄檔的路徑(必須具有寫入權限):

# 將錯誤訊息儲存至指定檔案
error_log("Error message.", 3, "/var/tmp/my-errors.log");

syslog 寫入系統記錄檔

PHP 的 syslog 函數可以將訊息遞送至作業系統的 logger,統一存放在作業系統的記錄檔中。

syslog 可以記錄各類型的訊息,依據嚴重程度將訊息區分為不同的層級,以下是訊息的分級表:

訊息層級 說明
LOG_EMERG 系統已經無法使用。
LOG_ALERT 需要立即應變處理。
LOG_CRIT 嚴重(critical)訊息。
LOG_ERR 錯誤(error)訊息。
LOG_WARNING 警告(warning)訊息。
LOG_NOTICE 普通的關鍵訊息。
LOG_INFO 普通訊息。
LOG_DEBUG 除錯訊息。

在使用 syslog 記錄訊息時,需要搭配 openlog 函數closelog 函數開啟與關閉系統的 logger,以下是一個簡單的範例:

# 開啟 syslog,使用 MyScriptLog 作為識別字
openlog("MyScriptLog", 0, LOG_LOCAL0);

# 將錯誤訊息遞送至 syslog
syslog(LOG_ERR, "Error message.");

# 關閉 syslog
closelog();

在以 openlog 開啟系統的 logger 時,第三個參數需要指定處理訊息的 facility,在 Linux 系統下通常指定為 LOG_LOCAL0 即可,而若是 Windows 則可改用 LOG_USER,其他還有許多可用的 facility 參數可參考 openlog 的說明文件

若在 Linux 下執行上面這個 syslog 範例,預設就會將訊息記錄至 /var/log/syslog 這個記錄檔案中:

Dec 13 08:42:46 yourhost MyScriptLog: Error message.

由於我們在以 openlog 開啟系統的 logger 時,有指定以 MyScriptLog 作為識別字,所以在記錄檔中的每一筆記錄就都會有這個識別字,方便管理者查閱與搜尋。

syslog 嚴重訊息

依據作業系統的 syslog 設定,不同等級的訊息可能會有不同的處理方式,例如收到 LOG_EMERG 等級的訊息時,除了記錄在 /var/log/syslog 之外,系統還會送出廣播,通知所有線上的使用者。

# 送出最嚴重的訊息
syslog(LOG_EMERG, "Emergent message.");

當此訊息送出之後,每位線上的 Linux 使用者在終端機中都會收到類似這樣的廣播訊息:

Broadcast message from systemd-journald@yourhost (Sun 2020-12-13 08:49:45 CST):

MyScriptLog[23939]: Emergent message.

參考資料:GeeksforGeeks

Share
Published by
Office Guide

Recent Posts

Python 使用 PyAutoGUI 自動操作滑鼠與鍵盤

本篇介紹如何在 Python ...

1 年 ago

Ubuntu Linux 以 WireGuard 架設 VPN 伺服器教學與範例

本篇介紹如何在 Ubuntu ...

1 年 ago

Linux 網路設定 ip 指令用法教學與範例

本篇介紹如何在 Linux 系...

1 年 ago

Linux 以 Cryptsetup、LUKS 加密 USB 隨身碟教學與範例

介紹如何在 Linux 系統中...

1 年 ago