使用@whiskeysockets/baileys构建WhatsApp机器人时触发TypeError: logger.trace is not a function崩溃
使用@whiskeysockets/baileys构建WhatsApp机器人时触发TypeError: logger.trace is not a function崩溃
我明白你这会儿遇到的麻烦了——用Whiskeysockets Baileys搭WhatsApp机器人,QR登录成功了,但一收发消息就崩,报logger.trace is not a function的错。这问题大概率是Baileys期望你的日志工具提供trace方法,但当前配置的Pino logger没满足这个要求,可能是版本兼容或者配置细节的问题。下面给你几个实用的解决办法:
方法1:降级Pino到兼容版本
最新版的Pino可能在日志方法的实现上和Baileys的预期有出入,很多开发者验证过Pino v8.x版本和Baileys配合是没问题的。你可以先卸载当前版本,再安装指定版本:
npm uninstall pino pino-pretty npm install pino@8 pino-pretty@10
安装完重启机器人,应该就能正常收发消息了。
方法2:自定义封装符合要求的Logger
要是不想降级版本,你可以手动把Pino的实例封装一下,确保它有Baileys需要的trace方法:
const pino = require('pino'); // 先创建基础的Pino logger const baseLogger = pino({ level: 'trace', transport: { target: 'pino-pretty', options: { colorize: true } } }); // 封装成Baileys认可的Logger结构 const logger = { trace: baseLogger.trace.bind(baseLogger), debug: baseLogger.debug.bind(baseLogger), info: baseLogger.info.bind(baseLogger), warn: baseLogger.warn.bind(baseLogger), error: baseLogger.error.bind(baseLogger), fatal: baseLogger.fatal.bind(baseLogger) };
之后在makeWASocket的配置里,用这个封装好的logger代替原来的Pino实例就行。
方法3:排查Pino的安装与配置问题
有时候可能是Pino没安装到位,或者级别配置没生效。你可以先简单测试一下Pino的trace方法是否存在:
const pino = require('pino'); const testLogger = pino({ level: 'trace' }); console.log(typeof testLogger.trace); // 正常应该输出'function'
如果输出不是function,那说明你的Pino安装有问题,试试清空依赖重新安装:
rm -rf node_modules package-lock.json npm install
另外,你还可以临时换成Baileys自带的Logger来排查问题:
const { default: makeWASocket, fetchLatestBaileysVersion, useMultiFileAuthState, makeCacheableSignalKeyStore, DisconnectReason, logger: baileysLogger } = require('@whiskeysockets/baileys'); // 在makeWASocket里用baileysLogger代替你的Pino logger const sock = makeWASocket({ version, logger: baileysLogger, // 这里替换成自带的logger auth: { creds: state.creds, keys: makeCacheableSignalKeyStore(state.keys, fs) } });
如果用自带Logger没问题,那就确定是Pino的适配问题,再回到前面的方法解决就行。
内容来源于stack exchange
相关产品推荐
相关产品推荐

