php錯誤處理之錯誤記錄日誌

原文鏈接:https://www.jianshu.com/p/7c39f3f31f66

在一些公司裏面,有專門的日誌收集系統,日誌收集系統會在背後默默的幫你收集錯誤、警告、提示。

也有些公司沒有專門的日誌收集系統,通過文件來記錄服務器當中的運行日誌。

其中:PHP的錯誤,警告這些是必須要收集的。

那麼問題來了,不讓用戶看到,設置好錯誤報告級別,如何講錯誤收集到日誌系統中呢?

這裏需要使用到php.ini的相關配置項,這兩個配置項爲:

參數 配置項 說明
log_errors On/off 是否開啓日誌記錄
log_errors_max_len 整型,默認1024 單行錯誤最大記錄長度
error_log syslog或者指定路徑 錯誤日誌記錄在什麼地方

說明:

  1. 在表格中的log_errorslog_errors_max_len非常好理解。
  2. error_log指定講錯誤存放在什麼路徑上,配置項中的syslog可能有點不太好理解。syslog是指系統來記錄。windows系統在電腦的日誌收集裏面,linux默認在:/etc/syslog.conf

【擴展】若Linux系統啓動或修改了日誌收集,可能存儲在第三方專用的日誌收集服務器中。

此外,PHP還爲我們專門準備了一個自定義的錯誤日誌函數:

bool error_log (string $錯誤信息[int $錯誤消息類型 = 0 [string $存儲目標]])

這個函數可以把錯誤信息發送到web服務器的錯誤日誌,或者到一個文件裏。

常用的錯誤消息類型:

類型 說明
0 發送至默認的error_log指定位置
1 發送到指定的郵件位置(不熟悉可以不用看)
3 發送到指定的文件位置

--------------------

補充部分:

--------------------

看到有說:

nginx只對頁面的訪問做access記錄日誌。不會有php的error log 信息。nginx把對php的請求發給php-fpm fastcgi進程來處理,默認的php-fpm只會輸出php-fpm的錯誤信息,在php-fpm的errors log裏也看不到php的errorlog。
原因是php-fpm的配置文件php-fpm.conf中默認是關閉worker進程的錯誤輸出,直接把他們重定向到/dev/null,所以我們在nginx的error log 和php-fpm的errorlog都看不到php的錯誤日誌。
所以我們要進行如下的設置就能查看到nginx下php-fpm不記錄php錯誤日誌的方法

修改 php-fpm.conf 文件,添加(或修改)如下配置:
  [global]
  error_log = log/error_log

  [www]
  catch_workers_output = yes

修改 php.ini 文件,添加(或修改)如下配置:
  log_errors = On
  error_log = "/usr/local/lnmp/php/var/log/error_log"
  error_reporting=E_ALL&~E_NOTICE

----------------------------------------

個人測試後發現:

-----------------------------------------

根據個人的測試,發現,php-fpm中的www.conf文件中的:

[www] catch_workers_output = yes

設置yes或者on 沒有起任何作用

對於nginx 和php-fpm 和php三者來說:

php.ini中設置了error_log的保存路徑後,如果這裏設置的路徑爲無效(自帶的 error_log =syslog 測試後是無效的路徑,如果設置瞭如 error_log = /var/log/php.error.log 這樣的路徑,請保證這個文件確實存在並且有寫入權限,否則仍然是無效的路徑,php進程不會自動創建這個文件的),那麼錯誤就會被打印到nginx的 error_log所指向的路徑中!如果設置的路徑有效,則打印到這裏設置的地方!

php-fpm在記錄錯誤的這個環節並沒有啓動任何作用!

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章