温馨提示×

Linux系统Swagger如何进行日志记录

小樊
59
2025-07-21 05:57:56
栏目: 智能运维

在Linux系统中,Swagger(通常指的是OpenAPI规范及其实现,如Swagger UI和Swagger Editor)本身不直接提供日志记录功能,但你可以通过以下几种方法来实现Swagger的日志记录:

使用Swagger UI内置日志

  • 查看Swagger UI容器日志(如果使用Docker部署):
    docker logs swagger_container_name
    
  • 查看Nginx/Apache访问日志(如果通过Web服务器代理):
    tail -f /var/log/nginx/access.log
    

集成日志库

  • Node.js (Express + Swagger UI Express)
    const express = require('express');
    const swaggerUi = require('swagger-ui-express');
    const swaggerDocument = require('./swagger.json');
    const app = express();
    
    // 中间件:记录请求日志
    app.use((req, res, next) => {
      console.log(`Request: ${req.method} ${req.url}`);
      next();
    });
    
    app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
    app.listen(3000, () => {
      console.log('Server is running on port 3000');
    });
    
  • Python (Flask + Flask-Swagger)
    from flask import Flask, request
    from flasgger import Swagger
    import logging
    
    app = Flask(__name__)
    swagger = Swagger(app)
    
    # 中间件:记录请求日志
    @app.before_request
    def log_request_info():
      app.logger.info('Request: %s %s', request.method, request.url)
    
    @app.route('/api-docs')
    def swagger_ui():
      return swagger.ui
    
    if __name__ == '__main__':
      app.run(debug=True)
    

使用Logrotate管理日志文件

  • 创建配置文件 /etc/logrotate.d/swagger
    /var/log/swagger/*.log {
        daily
        missingok
        rotate 30
        compress
        delaycompress
        notifempty
        create 644 root root
        sharedscripts
        postrotate
            /usr/bin/systemctl reload your-service.service > /dev/null
        endscript
    }
    

集中式日志管理(ELK Stack)

  • 配置Filebeat收集Swagger日志
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /var/log/swagger/*.log
      fields:
        app: swagger
        env: production
    output.logstash:
      hosts: ["logstash-server:5044"]
    
  • Logstash配置示例
    input {
      beats {
        port => 5044
      }
    }
    
    filter {
      if [fields][app] == "swagger" {
        grok {
          match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} [%{DATA:thread}] %{LOGLEVEL:loglevel} %{DATA:logger} - %{GREEDYDATA:message}" }
        }
      }
    }
    
    output {
      elasticsearch {
        hosts => ["http://elasticsearch:9200"]
        index => "swagger-logs-%{+YYYY.MM.dd}"
      }
    }
    

使用自定义脚本管理日志

  • 创建清理脚本 /usr/local/bin/clean-swagger-logs.sh
    #!/bin/bash
    find /var/log/swagger-editor/ -mtime 7 | xargs rm -rf
    
  • 赋予脚本执行权限:
    sudo chmod +x /usr/local/bin/clean-swagger-logs.sh
    
  • 定时执行脚本:
    crontab -e
    # 添加以下行以每天清理日志
    0 0 * * * /usr/local/bin/clean-swagger-logs.sh
    

通过以上方法,你可以在Linux系统上有效地记录和管理Swagger相关的日志,确保系统的稳定运行和问题的快速排查。

0