文章出處

大多數情況下,調試信息,都可以通過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部分


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()