redis.log 仅限 redis 服务器端 lua 环境使用,需通过 redis-cli eval 等方式执行;参数首为日志级别常量,后续为字符串,nil 值须用 tostring() 转换,日志长度超 1024 字节被截断,且受 redis.conf 中 loglevel 配置影响。

redis.log 函数只能在 Redis 服务器端 Lua 环境中使用,不能在本地 Lua 解释器里调用
Redis 提供的 redis.log 是专为 Lua 脚本调试设计的服务器端日志接口,它会把日志写入 Redis 的 redis-server 日志文件(如 redis.log),而不是输出到控制台。这意味着你必须通过 redis-cli EVAL 或其他 Redis 客户端执行脚本,才能看到效果;直接用 lua script.lua 运行会报错 attempt to call a nil value (global 'redis')。
常见错误现象:在本地写好 Lua 脚本后直接运行,发现没输出、没报错、也没日志——根本原因是 redis 表只存在于 Redis 内嵌 Lua 环境中,外部 Lua 不认识它。
-
redis.log第一个参数必须是日志级别常量:redis.LOG_DEBUG、redis.LOG_VERBOSE、redis.LOG_NOTICE、redis.LOG_WARNING - 第二个及以后的参数是字符串(支持
string.format风格占位符,但不支持自动类型转换,非字符串需显式转) - 日志内容长度超过 1024 字节会被截断,超长调试信息建议拆分或取关键字段
日志级别影响是否可见,必须确保 redis.conf 中 loglevel ≥ 对应级别
Redis 默认 loglevel 是 notice,所以用 redis.LOG_DEBUG 打印的日志默认不会写入日志文件。如果你在脚本里写了 redis.log(redis.LOG_DEBUG, "key=%s", KEYS[1]) 却看不到,大概率是配置没调。
Redis 缓存和数据结构管理技能。通过自然语言操作 Redis,支持 String、Hash、List、Set、ZSet、Stream 等数据结构操作。当用户提到 Redis、缓存、消息队列、会话存储时使用此技能。
- 检查当前配置:
CONFIG GET loglevel,返回值可能是["loglevel","notice"] - 临时提升级别(重启不生效):
CONFIG SET loglevel debug - 永久生效需修改
redis.conf中loglevel debug并重启服务 -
redis.LOG_WARNING和redis.LOG_NOTICE在默认配置下即可输出,适合生产环境轻量调试
KEYS 和 ARGV 变量可直接拼接打印,但 nil 值会导致 redis.log 报错
在 Lua 脚本中访问 KEYS[1] 或 ARGV[2] 时,如果对应位置为空(比如没传参),值是 nil。而 redis.log 不接受 nil 作为格式化参数,会直接中断脚本并返回错误 ERR Error running script (call to f_...): @user_script:3: user_script:3: bad argument #2 to 'log' (string expected, got nil)。
- 安全写法:用
tostring()包裹所有可能为nil的变量,例如redis.log(redis.LOG_NOTICE, "key=%s, arg=%s", tostring(KEYS[1]), tostring(ARGV[1])) - 避免用
..拼接字符串再传给redis.log,因为nil .. "str"会触发运行时错误 - 调试复杂结构(如 table)时,不要直接传整个 table,可用
cjson.encode()(需 Redis 加载 cjson 模块)或手写简单遍历
日志内容不会实时刷盘,高并发下可能延迟几秒甚至丢失
Redis 的日志系统不是同步写磁盘的,尤其在 appendonly no + 高吞吐场景下,redis.log 输出可能缓存在内存中,遭遇 crash 或强制 kill 时丢失。它本质是辅助调试的“尽力而为”机制,不能替代业务层日志。
- 不要依赖
redis.log做审计或关键状态记录 - 调试期间可配合
redis-cli --stat或监控INFO commandstats观察脚本执行频次 - 若发现日志“突然消失”,先检查 Redis 进程是否因 OOM 被杀,或磁盘满导致日志写入失败
真正难的是在集群模式下定位哪台节点执行了脚本——redis.log 只写在对应 shard 的日志里,没有统一入口,得挨个查节点日志文件。










