本文目录导读:

是的,脚本可以自动记录 Webhook 日志,通常可以通过以下几种方式实现:
基础日志记录(Node.js示例)
const express = require('express');
const fs = require('fs');
const app = express();
app.post('/webhook', (req, res) => {
const log = {
timestamp: new Date().toISOString(),
headers: req.headers,
body: req.body,
ip: req.ip
};
// 追加到日志文件
fs.appendFileSync('webhook.log', JSON.stringify(log) + '\n');
res.status(200).send('OK');
});
使用日志库(更专业)
# Python示例
import logging
from flask import Flask, request
app = Flask(__name__)
# 配置日志
logging.basicConfig(
filename='webhook.log',
level=logging.INFO,
format='%(asctime)s - %(message)s'
)
@app.route('/webhook', methods=['POST'])
def webhook():
log_data = {
'headers': dict(request.headers),
'body': request.json,
'method': request.method
}
logging.info(f"Webhook received: {log_data}")
return 'OK', 200
高级功能实现
// TypeScript示例
interface WebhookLog {
id: string;
timestamp: string;
method: string;
headers: Record<string, string>;
body: any;
responseStatus: number;
duration: number;
}
class WebhookLogger {
private logs: WebhookLog[] = [];
async logWebhook(req: Request, res: Response): Promise<void> {
const startTime = Date.now();
const logEntry: WebhookLog = {
id: crypto.randomUUID(),
timestamp: new Date().toISOString(),
method: req.method,
headers: Object.fromEntries(req.headers),
body: req.body,
responseStatus: res.statusCode,
duration: Date.now() - startTime
};
// 存储到文件或数据库
await this.saveToDatabase(logEntry);
this.logs.push(logEntry);
}
}
自动日志轮转
#!/bin/bash
# 日志轮转脚本
LOG_FILE="/var/log/webhook.log"
MAX_SIZE=10000000 # 10MB
if [ -f "$LOG_FILE" ] && [ $(stat -c%s "$LOG_FILE") -gt $MAX_SIZE ]; then
mv $LOG_FILE "${LOG_FILE}.$(date +%Y%m%d_%H%M%S)"
gzip "${LOG_FILE}.$(date +%Y%m%d_%H%M%S)"
fi
使用现成工具
简单的Shell脚本
#!/bin/bash
# 监听Webhook并记录日志
while true; do
nc -l -p 8080 > >(tee -a webhook_raw.log) 2>&1
done
使用systemd服务
[Service] ExecStart=/usr/bin/python3 /opt/webhook-logger.py StandardOutput=append:/var/log/webhook.log StandardError=append:/var/log/webhook-error.log Restart=always
推荐实践
- 结构化日志:使用JSON格式便于后续分析
- 日志级别:区分INFO、WARNING、ERROR
- 自动清理:设置日志保留策略
- 错误处理:确保日志记录不影响主流程
- 安全考虑:过滤敏感信息(如密码、token)
需要更具体的实现方案吗?比如针对特定语言或框架的代码示例?