如何在Restify中正确搭配Bunyan日志器与auditLogger插件?
Restify auditLogger 与 Bunyan 配合无日志输出的问题排查与正确用法
我来帮你梳理下问题所在,你的代码里有几个小细节没处理对,导致日志没输出,下面给你拆解原因和正确的写法:
你的写法里的问题点
- 多余的
printLog参数:Restify的auditLogger根本没有这个配置项,应该是你把其他插件的参数混进来了,这个参数不仅没用,还可能干扰插件的正常逻辑。 - 重复的事件配置:
auditLogger默认就是监听after事件的处理器,你既手动用server.on('after', ...)绑定,又在配置里写event: 'after',属于重复操作,虽然不算致命,但没必要。 - Bunyan日志级别可能未明确:虽然Bunyan默认级别是
info,而auditLogger默认输出info级别的日志,但有时候环境配置会影响级别,显式指定级别能避免踩坑。
正确的搭配写法
推荐方式:用server.use()注册插件
这是Restify官方推荐的用法,更简洁规范:
const restify = require('restify'); const bunyan = require('bunyan'); // 先创建Bunyan日志实例,显式配置级别和输出流 const auditLogger = bunyan.createLogger({ name: 'audit', level: 'info', // 明确设置级别,确保请求日志能被输出 stream: process.stdout }); const server = restify.createServer(); // 直接注册auditLogger插件即可,它会自动监听after事件 server.use(restify.plugins.auditLogger({ log: auditLogger })); // 写个测试接口验证 server.get('/test', (req, res, next) => { res.send(200, '测试成功'); next(); }); server.listen(8080, () => { console.log(`服务器运行在 ${server.url}`); });
备选方式:手动绑定after事件(不推荐)
如果你非要用手动绑定的方式,记得去掉多余参数:
server.on('after', restify.plugins.auditLogger({ log: bunyan.createLogger({ name: 'audit', level: 'info', stream: process.stdout }) // 删掉event: 'after',因为已经手动绑定到after事件了 }));
快速验证的小技巧
- 可以临时把Bunyan的级别改成
trace,这样所有级别的日志都会输出,能快速排查是不是级别过滤导致的问题。 - 先在接口里加个
console.log('请求进来了'),确认请求确实到达了服务器,排除是请求没触发的问题。
内容的提问来源于stack exchange,提问作者Circle
相关产品推荐
相关产品推荐

