1. 程式人生 > >openresty 前端開發入門六之除錯篇

openresty 前端開發入門六之除錯篇

大多數情況下,除錯資訊,都可以通過ngx.say打印出來,但是有的時候,我們希望列印除錯日誌,不影響到返回資料,所以系統列印到其它地方,比如日誌檔案,或者控制檯

這裡主要用到一個方法就是ngx.log,這個方法可以將日誌輸出到error.log裡面,支援多種級別訊息,如下:

ngx.STDERR
ngx.EMERG
ngx.ALERT
ngx.CRIT
ngx.ERR
ngx.WARN
ngx.NOTICE
ngx.INFO
ngx.DEBUG

可以通過以下方式輸出除錯資訊,大多數情況下我們只要使用一個來輸出我們的除錯資訊就好了,比如ngx.ALERT,我就比較喜歡這個,並且設定為我的idea live template了,只需要sout + TAB 就可以輸出,關於idea有很多玩法,有時間可以分享給大家,就裡就不說了

lua/hello.lua

ngx.say('print to browser')

ngx.log(ngx.ALERT, 'print to error.log')
ngx.log(ngx.STDERR, 'print to error.log')
ngx.log(ngx.EMERG, 'print to error.log')
ngx.log(ngx.ALERT, 'print to error.log')
ngx.log(ngx.CRIT, 'print to error.log')
ngx.log(ngx.ERR, 'print to error.log')
ngx.log(ngx.WARN, 'print to
error.log') ngx.log(ngx.NOTICE, 'print to error.log') ngx.log(ngx.INFO, 'print to error.log') ngx.log(ngx.DEBUG, 'print to error.log')

然後用瀏覽器訪問 http://localhost/lua/hello 檢視瀏覽器輸出,還有 logs/error.log 檔案輸出,就能明白大概的意思了,也不用過多解釋

還有一種就是直接呼叫lua的print方法,進行輸出,這個方法預設也會輸出到error.log,預設輸出級別是NOTICE,但是需要編譯openresty的時候加上debug引數,如果是下載的windows預編譯版本的話,預設沒有debug,所以部分資訊可能看不到,有需要可以自己編譯一個

當然nginx裡面還可以配置error日誌級別,如下

error_log  logs/error.log  notice;

這句預設會在nginx.conf檔案裡面,只是註釋掉了而已,只要開啟註釋就可以了,這樣我們就可以直接通過print來輸出日誌了,完全是lua自帶的函式,很多程式碼拿過來就可以直接使用

還有就是lua執行時報錯資訊捕獲,原因可能是語法問題,或者空指標等等,導致500錯誤的,這些錯誤日誌都會輸出在error.log裡面,可以用tail命令實時檢視,也可以通過封裝然後採用pcall的呼叫形式,進行函式呼叫,這樣就不會出現500,可以根據執行成敗,將結果輸出到客戶端,做到像php那樣所見即所得,可以大大提高我們的開發效率,這個後面我會通過封裝一個輕量級框架來介紹,這裡就先不講了,有興趣的同學可以瞭解一下

示例程式碼 參見demo6部分