我们现在用openresty开发项目时也是采用在代码中增加专门的日志文件和日志输出,在代码中日志做一个输出级别比如debug,info,error等,后期项目测试和上线后,可以通过调整日志输出级别可以屏蔽调试信息。
-------save logfunction gcs_log(info,text)
--loglevel 是一个变量,由系统启动是传入的值
if loglevel == "not" then
return nil
end
local infonum = 0
local loglevelnum = 0
if info == "debug" then
infonum = 5
elseif info == "info" then
infonum = 3
elseif info == "error" then
infonum = 1
end
if loglevel == "debug" then
loglevelnum = 5
elseif loglevel == "info" then
loglevelnum = 3
elseif loglevel == "error" then
loglevelnum = 1
end
if infonum <= loglevelnum then
local file = io.open(logfile,"a")
local timenum = ngx.now()
local timestr = tostring(timenum)
timestr = string.sub(timestr,11)--取ms
timestr = "["..os.date("%Y-%m-%d %H:%M:%S",timenum)..timestr.."]"
file:write(timestr..":["..info.."]:"..text)
file:write("\r\n")
file:close()
file = nil
end
end
----------------------
不过我们的代码还有几个问题主要是性能的问题,我们每次记录日志都需要打开和关闭一次文件,这样不太好,后期希望把文件打开的句柄放在openresty中,听春哥说过一次,不过不知道怎么实现?
还可以采用ffi,调用C的接口去写文件,这样效果会更好些?
还可以增加一些代码做日志的截断之类的工作。