如何为测试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
相关产品推荐
相关产品推荐

