記錄php日誌

2022-06-12 02:36:09 字數 4042 閱讀 1442

1、記錄php錯誤日誌

display_errors與log_errors的區別

display_errors

錯誤回顯,一般常用於開發模式,但是很多應用在正式環境中也忘記了關閉此選項。錯誤回顯可以暴露出非常多的敏感資訊,為攻擊者下一步攻擊提供便利。推薦關閉此選項。

display_errors = on

開啟狀態下,若出現錯誤,則報錯,出現錯誤提示

dispaly_errors = off

在正式環境下用這個就行了,把錯誤資訊記錄在日誌裡。正好可以關閉錯誤回顯。

對於php開發人員來說,一旦某個產品投入使用,那麼第一件事就是應該將display_errors選項關閉,以免因為這些錯誤所透露的路徑、資料庫連線、資料表等資訊而遭到黑客攻擊。

某個產品投入使用後,難免會有錯誤資訊,那麼如何記錄這些對開發人員非常有用的資訊呢?

將php的log_errors開啟即可,預設是記錄到web伺服器的日誌檔案裡,比如apache的error.log檔案。當然也可以記錄錯誤日誌到指定的檔案中。

# vim /etc/php.ini

display_errors = off

log_errors = on

error_log = /var/log/php_error/php-error.log

另外也可以設定error_log = syslog,使這些錯誤資訊記錄到作業系統的日誌裡。

error_reporting 設定錯誤訊息回報的等級

e_all能從不良編碼實踐到無害提示到出錯的所有資訊。e_all 對於開發過程來說有點太細,因為它在螢幕上為一些小事(例如變數未初始化)也顯示提示,會搞糟瀏覽器的輸出

最好把預設值改為:error_reporting =

e_all & ~e_notice

預設值是:e_all & ~e_deprecated & ~e_strict

php.inidisplay_errors = off失效的解決

問題:

php設定檔案php.ini中明明已經設定display_errors = off,但是在執行過程中,網頁上還是會出現錯誤資訊。

解決:

經查log_errors= on,據官方的說法,當這個log_errors設定為on,那麼必須指定error_log檔案,如果沒指定或者指定的檔案沒有許可權寫入,那麼照樣會輸出到正常的輸出渠道,那麼也就使得display_errors 這個指定的off失效,錯誤資訊還是列印了出來。於是將log_errors = off,問題就解決了。

2、實現nginx中使用php-fpm時記錄php錯誤日誌的配置方法

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錯誤日誌的方法:

1,修改php-fpm.conf中的配置,如果沒有請增加:

[global]

error_log = /var/log/php_error/php-fpm.log

[www]

catch_workers_output = yes

2.修改php.ini中配置,沒有則增加:

display_errors = off

log_errors = on

error_log = /var/log/php_error/php-error.log

error_reporting=e_all&~e_notice

3.重啟php-fpm

當php執行錯誤時就能看到錯誤日誌在」

/var/log/php_error/php-fpm.log」中了

轉到nginx+php-fpm後,飽受500,502問題困擾。當nginx收到如上錯誤碼時,可以確定後端php-fpm解析php出了某種問題,比如,執行錯誤,執行超時。

php-fpm.conf的配置檔案中有乙個引數request_slowlog_timeout是這樣描述的

當request_slowlog_timeout 設為乙個具體秒時request_slowlog_timeout

=5,表示如果哪個指令碼執行時間大於5秒,會記錄這個指令碼到慢日誌檔案中

request_slowlog_timeout =0表示關閉慢日誌輸出。

慢日誌檔案位置預設在php的安裝目錄下的log資料夾中,可以通過修改slowlog = log/$pool.log.slow引數來指定。

php-fpm慢日誌的例子,慢日誌會記錄下程序號,指令碼名稱,具體哪個檔案哪行**的哪個函式執行時間過長。

request_slowlog_timeout 和 slowlog需要同時設定,開啟request_slowlog_timeout的同時需要開啟

slowlog

慢日誌路徑需要手動建立

具體開啟php-fpm慢日誌步驟:

vi etc/php-fpm.conf

去掉request_slowlog_timeout 、slowlog的字首分號';',設定request_slowlog_timeout =5;

:wq儲存退出

建立慢日誌目錄

mkdir log

重啟php-fpm

kill -int `cat var/run/php-fpm.pid

sbin/php-fpm

4、所有具體步驟

1、vi php.ini

dispaly_errors = off

log_errors = on

error_log = /var/log/php_error/php-error.log

error_reporting = e_all & ~e_deprecated

& ~e_strict

2、vi php-fpm.conf

[global]

error_log = /var/log/php_error/php-fpm.log

[www]

catch_workers_output = yes

request_slowlog_timeout = 5

slowlog = /var/log/php_error/slow.log

3、mkdir /var/log/php_error

chown www:www /var/log/php_error

4、先檢測,若無報錯,則執行過載:/usr/local/php/sbin/php-fpm –t

過載:service php-fpm reload

5、檢視/var/log/php_error資料夾下是否有相應的日誌檔案生成

6、日誌輪詢 vi

/etc/logrotate.d/nginx

把日誌路徑新增上即可: /var/log/php_error/*.log

注:6具體參考:使用linux自帶的命令logrotate對nginx日誌進行切割

php全面記錄日誌 php記錄日誌

簡介 這是php記錄日誌的詳細頁面,介紹了和php,有關的知識 技巧 經驗,和一些php原始碼等。class pingjiaf frameborder 0 src scrolling no ss log level 0 ss log filename tmp ss log ss log levels...

php記錄日誌

ss log level 0 ss log filename tmp ss log ss log levels array none 0,error 1,info 2,debug 3 設定日誌級別 function ss log set level level error 記錄日誌 function...

PHP日誌記錄方法

php裡提供了乙個error log 能幫助你快捷的將日誌輸出到指定的檔案裡。這個函式的介面描述如下 bool error log string message int message type 0 string destination string extra headers 其中第乙個引數是要輸...