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
(調試)級別,避免日志冗余。