You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将所有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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 11:54:03