◆ ngx.log():
函数ngx.log(log_level,…)记录OpenResty的运行日志,用法很类似Lua的标准库
函数print,可以接受任意多个参数,记录任意信息。
ngx.log(ngx.INFO,"hello openresty")
ngx.log的第一个参数是日志级别,只有高于配置文件里error_log指令设定级别的消息才会被真正地写入日志(通常都是error级),取值从高到低是:
ngx.STDERR:日志直接打印到标准输出,最高级别的日志
ngx.EMERG:发生了紧急情况(emergency), 需要立即处理
ngx.ALERT:发生严重错误,可能需要报警给运维系统
ngx.CRIT:发生严重错误(critical)
ngx.ERR:普通的错误,业务中发生了意外
ngx.WARN:警告信息,业务正常,但可能要检查警告的来源
ngx.NOTICE:提醒信息,仅仅是告知,通常可以忽略
ngx.INFO:一般的信息
ngx.DEBUG:调试用的信息,只有debug版本才会启用
OpenResty同时替换了全局函数print ,它等价于ngx.log(ngx.NOTICE, …)。
OpenResty对日志消息长度有限制,上限约2K 个字符,所以不能在日志里记录大段的文字,超长的字符串会被截断。在记录日志时也应当尽量少用字符串连接操作“… ”,不仅可以节约内存,而且还避免了参数为nil时无法连接的错误。
通常在业务逻辑的关键点用INFO 或NOTICE级别,捕获异常或错误时用ERR 级别,在调试程序时只要简单地变动配置文件里的error_log指令就能够输出更多的信息。
注:errlog记录日志时是直接写磁盘的阻塞操作,没有缓冲等优化措施,所以仅应该用来记录必要的错误信息和调试,不应该在实际的生产环境中频繁地调用此接口写磁盘文件,否则会极大地拖累OpenResty.