使用PHP的開發(fā)者經(jīng)常面臨一個(gè)問題,就是如何來訪問、查錯(cuò)應(yīng)用程序報(bào)錯(cuò)的信息。正常情況下,當(dāng)PHP程序啟動(dòng)后,會(huì)將處理過程中的任何錯(cuò)誤信息直接輸出到屏幕上。這樣的做法顯然是不可取的,因?yàn)樘峤唤o用戶前必須對(duì)錯(cuò)誤信息進(jìn)行處理。
Logstash是一個(gè)通用的日志采集處理工具,它可以輕松地搜集來自多個(gè)源的數(shù)據(jù),并將其記錄到一個(gè)目標(biāo)位置。此處針對(duì)PHP程序的錯(cuò)誤,在程序中產(chǎn)生錯(cuò)誤后可以通過配置將錯(cuò)誤輸出到Logstash中進(jìn)行處理。
那么,如何設(shè)置php.ini文件呢?大家可以找到如下部分。
;;;;;;;;;;;;;;;;;
; Error handling ;
;;;;;;;;;;;;;;;;;
; 是否顯示每個(gè)錯(cuò)誤報(bào)告(默認(rèn)是關(guān)閉的)
; http://php.net/display-errors
display_errors = Off
; 錯(cuò)誤日志記錄粒度(官方建議:E_ALL)
; http://php.net/error-reporting
error_reporting = E_ALL
在此基礎(chǔ)上,我們需要配置Logstash的input部分,來搜集PHP報(bào)錯(cuò)的信息。下面是一個(gè)配置示例:
input {
udp {
port =>9550
buffer_size =>100000
codec =>json
}
}
filter {
if [type] == "syslog" and [program] == "php" and [message] =~ /PHP Notice/ {
drop { }
}
}
output {
# 這里你可以自由地配置你需要輸出的action
stdout { codec =>rubydebug }
}
上述配置根據(jù)是否成功采集了PHP程序報(bào)錯(cuò)信息,將會(huì)輸出“ruby”調(diào)試日志。
由于Logstash是一個(gè)通用的日志采集處理工具,它可以非常自由地根據(jù)不同的需求進(jìn)行靈活的配置操作,并且可以同時(shí)監(jiān)控多個(gè)服務(wù),記錄下不同服務(wù)產(chǎn)生的日志內(nèi)容。
總之,Logstash可以為我們處理許多問題。在使用PHP時(shí),將PHP出錯(cuò)日志轉(zhuǎn)存到Logstash中可以為我們提供一個(gè)方便的,可以自定義操作的日志處理方法。