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

如何为测试Webhook添加每日日志文件记录功能?

实现Webhook日志记录与每日归档

要实现日志文件存储和自动每日归档,推荐使用Node.js生态中的winston日志库配合winston-daily-rotate-file插件,这两个工具能快速满足需求,无需手动实现文件分割和归档逻辑。

步骤1:安装依赖

在项目目录下执行以下命令安装所需包:

npm install winston winston-daily-rotate-file

步骤2:配置日志模块

修改你的Webhook代码,替换原有的console.log调用,添加完整的日志逻辑:

const express = require('express');
const bodyParser = require('body-parser');
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');
const fs = require('fs');

// 确保logs目录存在,避免日志写入失败
const logsDir = './logs';
if (!fs.existsSync(logsDir)) {
  fs.mkdirSync(logsDir, { recursive: true });
}

// 创建日志实例
const logger = winston.createLogger({
  level: 'info', // 日志级别:debug < info < warn < error,只记录>=该级别的日志
  format: winston.format.combine(
    winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }), // 添加时间戳
    winston.format.json() // 用JSON格式存储,便于后续解析;若需要简洁文本可替换为winston.format.simple()
  ),
  transports: [
    // 每日归档的文件传输器
    new DailyRotateFile({
      filename: `${logsDir}/webhook-%DATE%.log`, // 日志文件命名格式,%DATE%会被替换为当前日期
      datePattern: 'YYYY-MM-DD', // 按天分割日志
      maxSize: '20m', // 单个日志文件最大20MB,超过则自动分割新文件
      maxFiles: '30d', // 保留最近30天的日志,自动删除更早的归档文件
      zippedArchive: true // 对归档的旧日志进行压缩,节省磁盘空间
    }),
    // 可选:同时在控制台输出日志,方便开发调试
    new winston.transports.Console({
      format: winston.format.combine(
        winston.format.colorize(),
        winston.format.simple()
      )
    })
  ]
});

const app = express();
app.use(bodyParser.json());

app.get('/', (req, res) => {
  res.send('Webhook server is running');
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  logger.info(`Webhook server is listening on port ${PORT}`); // 替换console.log
});

app.post('/webhook', (req, res) => {
  logger.info('Webhook event received', req.body); // 记录收到的Webhook事件
  res.status(200).send('OK');
});

app.post('/event', function (req, res) {
  var events = req.body;
  events.forEach(function (event) {
    processEvent(event);
  });
  res.status(200).send('Events received'); // 建议添加响应,避免客户端超时
});

// 完善事件处理函数,添加日志记录
function processEvent(event) {
  try {
    logger.info('Starting event processing', { eventId: event.id || 'unknown' });
    // 这里写入你的事件处理逻辑
    // ...
    
    logger.info('Event processing completed', { eventId: event.id || 'unknown' });
  } catch (error) {
    logger.error('Event processing failed', { 
      eventId: event.id || 'unknown', 
      error: error.message,
      stack: error.stack // 可选:记录错误堆栈,便于排查问题
    });
  }
}

关键配置说明

  • filename与datePattern:%DATE%会被替换为datePattern指定的日期格式,实现每日生成一个新日志文件(如webhook-2024-05-20.log)。
  • maxSize:防止单个日志文件过大,超过设定值后会自动生成新的分段文件(如webhook-2024-05-20.1.log)。
  • maxFiles:自动清理过期日志,避免磁盘空间被占满。
  • zippedArchive:旧日志会被压缩为.zip文件,减少磁盘占用。

额外提示

  • 若需要记录HTTP请求的详细日志(如请求方法、路径、状态码等),可以配合morgan中间件将请求日志接入winston,实现统一管理。
  • 日志级别可根据环境调整:开发环境用debug级别记录更多细节,生产环境用info或warn减少日志量。

内容的提问来源于stack exchange,提问作者ITW Git

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 15:31:08