Ubuntu环境下Swagger错误日志处理指南
在Ubuntu系统中,Swagger相关的错误日志可通过以下途径查看:
swagger project start)时,错误信息会直接显示在终端中,包含具体的错误类型(如语法错误、依赖缺失)和描述。swagger-editor),使用journalctl命令查看详细日志:journalctl -u swagger-editor # 查看指定服务的日志
journalctl -u swagger-editor -f # 实时跟踪日志
/var/log/目录下(如swagger.log),可使用tail命令实时查看:sudo tail -f /var/log/swagger.log
为避免日志文件过大占用磁盘空间,可通过以下工具进行自动化管理:
/etc/logrotate.d/swagger-editor配置文件(示例):/var/log/swagger-editor/*.log {
daily # 每天轮转
missingok # 文件缺失时不报错
rotate 7 # 保留7个归档文件
compress # 压缩旧日志
delaycompress # 延迟压缩(保留最近一个未压缩)
notifempty # 空日志不轮转
create 0644 root root # 新日志文件权限
}
测试配置有效性:sudo logrotate -d /etc/logrotate.d/swagger-editor(模拟运行),强制轮转:sudo logrotate -f /etc/logrotate.d/swagger-editor。journalctl命令清理Systemd管理的日志:sudo journalctl --vacuum-time=1w # 只保留1周内的日志
sudo journalctl --vacuum-size=500M # 只保留500MB以内的日志
Swagger本身不提供日志记录功能,需通过集成日志库或框架捕获错误:
logback(Java)或NLog(.NET)等日志库,记录API请求、响应及错误。以logback为例:
pom.xml中加入ch.qos.logback:logback-classic。logback.xml配置文件:<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/var/log/swagger-app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/var/log/swagger-app.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss} %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="FILE"/>
</root>
</configuration>
public void ConfigureServices(IServiceCollection services) {
services.AddSwaggerGen(c => {
c.SwaggerDoc("v1", new OpenApiInfo { Title = "API", Version = "v1" });
});
services.AddLogging(logging => {
logging.AddConfiguration(Configuration.GetSection("Logging"));
logging.AddConsole();
logging.AddFile("/var/log/swagger-app.log"); // 集成文件日志
});
}
flask.logging模块记录错误,结合python-json-logger生成结构化日志:from flask import Flask, jsonify
import logging
from pythonjsonlogger import jsonlogger
app = Flask(__name__)
logger = logging.getLogger()
logger.setLevel(logging.INFO)
# JSON格式日志处理器
logHandler = logging.StreamHandler()
formatter = jsonlogger.JsonFormatter('%(asctime)s %(levelname)s %(module)s %(message)s')
logHandler.setFormatter(formatter)
logger.addHandler(logHandler)
# 全局异常处理
@app.errorhandler(Exception)
def handle_exception(e):
logger.error("API Error", exc_info=True, extra={
"error_type": type(e).__name__,
"error_message": str(e),
"request_path": request.path
})
return jsonify({"error": "Internal Server Error", "message": str(e)}), 500
swagger project validate命令验证swagger.json/swagger.yaml格式是否正确,路径是否存在。sudo npm install -g swagger),或使用npm ls swagger检查依赖树。sudo chown -R $(whoami):$(whoami) /var/log/swagger-editor/
sudo chmod -R 755 /var/log/swagger-editor/
INFO(常规操作)、ERROR(异常)、DEBUG(调试)级别,避免日志冗余。