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/

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐