一、未正常打印錯誤日誌
openresty啓動時,通過 init_worker_by_lua_file D:\init.lua 的方式加載文件,如果lua代碼中有錯誤,則error日誌中未打印出錯誤信息。
比如以下代碼:
1、連接一個值爲nil的變量
local a
ngx.log(ngx.WARN, "value:" .. a)
ngx.log(ngx.WARN, "Successfully print the value of a")
2、讀文件時,如果文件test.lua不存在
local f = assert(io.open("test.lua", "r"))
local data = f:read("*all")
f:close()
3、寫文件時,如果路徑 D:\\lua\\file\\ 不存在
local f = assert(io.open("D:\\lua\\file\\test.lua", "w"))
f:write(data)
f:close()
類似以上情況的異常,在openresty啓動的時候,都未在日誌中打印出來,但是程序已經終止執行了,在調試時需要注意下。
目前沒有好的辦法,只是在需要的地方加入了一些額外的輸出日誌,以此來判斷是否成功執行。
二、attempt to index global 'ngx' (a nil value)
module(...)
function test()
ngx.log(ngx.WARN, "這是一個測試")
end
在test.lua文件中有如上代碼,執行該test函數時,報錯:attempt to index global 'ngx' (a nil value)。此時只需要在文件中加入以下代碼即可:
local ngx = ngx
或
module(...)改成module(...,package.seeall)