刚接触redis,阅读源码发现有很多打印日志的地方。但是如何打印到日志中,不太清楚,做了一次简单的探索。
首先,在void serverLogRaw中,
if (server.syslog_enabled) syslog(syslogLevelMap[level], "%s", msg);
搜索代码,发现server.syslog_enabled的值,来自redis.conf的#syslog-enabled yes配置项。
使用gdb跟踪server.syslog_enabled的值,为0,也证明了这个配置当时没有生效。
修改配置后,仍然没有日志,但是gdb确定日志开关已经开启了,
(gdb) p server.syslog_enabled
$1 = 1
然后注意到,并不是所有的日志都无法打印,级别为LOG_NOTICE,2的可以打印,
搜索syslog的日志说明:即,LOG_NOTICE往上,级别越严重。怀疑是日志级别有问题。
syslog函数参数priority取值
priority参数 | syslog.conf中对应的level取值 |
LOG_EMERG | emerg |
LOG_ALERT | alert |
LOG_CRIT | crit |
LOG_ERR | err |
LOG_WARNING | warning |
LOG_NOTICE | notice |
LOG_INFO | info |
LOG_DEBUG | debug |
在server.syslog_enabled定义的附近,发现了日志级别配置redis.conf使用方法。所以,要设置成debug,所有日志就可以打印了。
# debug (a lot of information, useful for development/testing)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel debug