如何将所有console日志发送至Discord的文本/embed消息
实现Node.js console日志全量同步到Discord的方案
核心原理
Node.js全局的console对象的所有输出方法(log/error/warn/info等)都是可重写的,我们可以在保留原生控制台输出逻辑的前提下,劫持所有日志内容,组装为Discord支持的文本/Embed格式后发送到指定频道。
具体实现步骤
1. 前置配置
首先在Discord对应频道创建Webhook,拿到Webhook调用地址,无需搭建Bot即可实现消息推送。
2. 完整代码实现
// 替换为你自己的Discord频道Webhook地址 const DISCORD_WEBHOOK_URL = "YOUR_DISCORD_WEBHOOK_URL"; // 备份原生console方法,避免重写后丢失原有输出能力 const originalConsoleMethods = { log: console.log, error: console.error, warn: console.warn, info: console.info, debug: console.debug }; /** * 通用方法:将日志内容发送到Discord * @param {string} level 日志级别 * @param {...any} args 日志原始参数 */ async function sendLogToDiscord(level, ...args) { // 格式化所有日志参数,对象类型自动转可读JSON const formattedLog = args.map(item => { if (typeof item === 'object') return JSON.stringify(item, null, 2); return String(item); }).join(' '); // 不同日志级别对应Embed不同侧边栏颜色 const levelColorMap = { log: 3066993, // 绿色 info: 3447003, // 蓝色 warn: 16776960, // 黄色 error: 15158332, // 红色 debug: 10070709 // 紫色 }; // 构造Discord Embed消息体 const payload = { embeds: [{ title: `[${level.toUpperCase()}] 运行日志`, description: `\`\`\`\n${formattedLog.slice(0, 4000)}\n\`\`\``, color: levelColorMap[level] || 3066993, timestamp: new Date().toISOString() }] }; try { await fetch(DISCORD_WEBHOOK_URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload) }); } catch (err) { // 必须调用原生console方法输出错误,避免触发循环调用 originalConsoleMethods.error('日志推送Discord失败:', err); } } // 重写全局console所有方法 Object.keys(originalConsoleMethods).forEach(logLevel => { console[logLevel] = (...args) => { // 先执行原生控制台输出,不影响原有调试逻辑 originalConsoleMethods[logLevel](...args); // 异步推送日志到Discord,不阻塞主业务进程 sendLogToDiscord(logLevel, ...args).catch(() => {}); }; });
注意事项
- 如果你使用的Node.js版本低于18,没有内置fetch API,可以替换为
axios或者安装node-fetch依赖实现网络请求 - Discord Webhook有频率限制,单IP每秒最多推送5条消息,日志量较大的场景建议先做聚合批量发送,避免被限流
- 发送日志的异常捕获逻辑中,必须调用备份的原生console方法输出错误,否则会触发循环调用导致进程崩溃
- 敏感数据(密钥、用户隐私信息等)建议在推送前做脱敏处理
- 单条Embed的描述内容最多支持4096字符,超长日志需要做拆分或者转成文件附件发送
内容的提问来源于stack exchange,提问作者Lokry
相关产品推荐
相关产品推荐

