脚本能自动记录Webhook日志吗?

wen 实用脚本 2

本文目录导读:

脚本能自动记录Webhook日志吗?

  1. 基础日志记录(Node.js示例)
  2. 使用日志库(更专业)
  3. 高级功能实现
  4. 自动日志轮转
  5. 使用现成工具
  6. 推荐实践

是的,脚本可以自动记录 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

推荐实践

  1. 结构化日志:使用JSON格式便于后续分析
  2. 日志级别:区分INFO、WARNING、ERROR
  3. 自动清理:设置日志保留策略
  4. 错误处理:确保日志记录不影响主流程
  5. 安全考虑:过滤敏感信息(如密码、token)

需要更具体的实现方案吗?比如针对特定语言或框架的代码示例?

抱歉,评论功能暂时关闭!