Swagger本身不直接处理日志,其日志记录依赖于承载它的后端服务(如Spring Boot、Node.js等)。因此,需先确认Swagger的部署方式(如集成在Spring Boot应用中、通过Swagger UI单独提供服务),再针对后端服务配置日志。
若Swagger集成在.NET项目中,可通过log4net库实现结构化日志记录,步骤如下:
创建配置文件
在项目根目录下新建CfgFile文件夹,添加log4net.Config XML文件,配置滚动日志文件(按日期分割、保留20份、单文件最大3MB)及输出格式:
<?xml version="1.0" encoding="utf-8"?>
<log4net>
<appender name="rollingAppender" type="log4net.Appender.RollingFileAppender">
<file value="logs/swagger.log" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppenderMinimalLock" />
<rollingStyle value="Composite" />
<datePattern value="yyyyMMdd.txt" />
<maxSizeRollBackups value="20" />
<maximumFileSize value="3MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
</layout>
</appender>
<root level="ALL">
<appender-ref ref="rollingAppender" />
</root>
</log4net>
修改项目配置
在Program.cs中初始化log4net,指定日志目录并记录Swagger初始化日志:
using System.IO;
using log4net;
using log4net.Config;
var logPath = Path.Combine(AppContext.BaseDirectory, "logs");
if (!Directory.Exists(logPath)) Directory.CreateDirectory(logPath);
XmlConfigurator.Configure(new FileInfo(Path.Combine(AppContext.BaseDirectory, "CfgFile/log4net.Config")));
var logger = LogManager.GetLogger(typeof(Program));
logger.Info("Swagger configuration initialized.");
Spring Boot项目替代方案
若为Spring Boot项目,可使用logback(默认日志库),步骤如下:
pom.xml中加入spring-boot-starter-logging(默认包含)。logback-spring.xml(src/main/resources目录下):<configuration>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/swagger.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/swagger.%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>
@Configuration
@EnableSwagger2
public class SwaggerConfig {
private static final Logger logger = LoggerFactory.getLogger(SwaggerConfig.class);
@Bean
public Docket api() {
logger.info("Initializing Swagger...");
return new Docket(DocumentationType.SWAGGER_2)
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.controller"))
.paths(PathSelectors.any())
.build();
}
}
/var/log/messages),可使用以下命令:
tail -f /var/log/messages | grep "Swagger"(过滤Swagger相关日志)。journalctl -u your-swagger-service --since "2025-10-01" --until "2025-10-28"(适用于systemd服务)。logs/swagger.log),直接使用文本工具查看:
cat logs/swagger.log:查看全部日志。less logs/swagger.log:分页查看(按q退出)。grep "ERROR" logs/swagger.log:过滤错误日志。使用logrotate工具自动分割、压缩日志,步骤如下:
/etc/logrotate.d/swagger,内容如下:/var/log/swagger/*.log {
daily # 每天轮转
missingok # 文件不存在时不报错
rotate 30 # 保留30份
compress # 压缩旧日志(gzip)
delaycompress # 延迟压缩(避免压缩当天日志)
notifempty # 空日志不轮转
create 644 root root # 创建新日志文件权限
sharedscripts # 所有日志处理完再执行脚本
postrotate
systemctl reload your-swagger-service > /dev/null # 重启服务(如Spring Boot)
endscript
}
logrotate -d /etc/logrotate.d/swagger(模拟运行,查看是否有错误)。对于生产环境,建议使用ELK Stack(Elasticsearch+Logstash+Kibana)或Fluentd实现日志集中收集、分析与可视化:
input(如file插件读取logs/swagger.log)、filter(解析日志格式)、output(发送到Elasticsearch)。INFO即可,DEBUG模式会增加磁盘IO,影响性能。通过以上步骤,可实现CentOS系统下Swagger日志的有效管理,覆盖从记录到分析的全流程。