1、使用redis日志
redis内嵌的lua引擎提供了日志打印,需要在 redis.conf中配置:
loglevel =
logfile =
在redis的lua脚本中,只需要打印相关日志即可:
redis.log(redis.LOG_WARNING, "foo bar")
redis.log函数接收两个参数,第一个是日志级别(LOG_DEBUG, LOG_VERBOSE, LOG_NOTICE and LOG_WARNING),第二个是日志内容。
缺点:需要对redis进行相关配置,重启。
2、使用lua table
使用lua table来存储日志内容,并把这个日志进行返回。
local logtable = {}
local function logit(msg)
logtable[#logtable+1] = msg
end
logit("foo")
logit("bar")
return logtable
输出:
foo@bar:~$ redis-cli --eval log-with-table.lua
1) "foo"
2) "bar"
优点:改动少,简单;
缺点:需要返回table,不方便lua脚本返回其他有业务含义的值;需要消耗内存存储日志;需要lua脚本执行完毕才能看到日志。
3、使用redis list
如果我们需要lua脚本执行完毕后返回有业务含义的值,并且需要记录日志,可以使用redis list来记录和检索消息。
local loglist = KEYS[1]
redis.pcall("DEL", loglist)
local function logit(msg)
redis.pcall("RPUSH", loglist, msg)
end
logit("foo")
logit("bar")
return 42
输出:
foo@bar:~$ redis-cli --eval log-with-list.lua log
(integer) 42
foo@bar:~$ redis-cli LRANGE log 0 -1
1) "foo"
2) "bar"
优点:类似lua table,代码简单直接;
缺点:需要传入记录日志的redis key,需要写redis,都是额外操作。
4、使用redis的Pub/Sub
稍微麻烦点了,不过实时性很好。
参考文章:https://redislabs.com/blog/5-6-7-methods-for-tracing-and-debugging-redis-lua-scripts/