CentOS 上 Swagger 的监控与日志记录实践
一 核心原则与总体架构
二 日志记录落地步骤
npm i log4js express swagger-ui-expressconst log4js = require('log4js');
const express = require('express');
const swaggerUi = require('swagger-ui-express');
const swaggerDocument = require('./swagger.json');
log4js.configure({
appenders: {
out: { type: 'stdout', layout: '{d{yyyy-MM-dd HH:mm:ss}} [%p] %c{1}: %m%n' },
file: { type: 'file', filename: '/var/log/myapp/access.log', layout: '{d} [%p] %m%n' }
},
categories: { default: { appenders: ['out','file'], level: 'info' } }
});
const logger = log4js.getLogger();
const app = express();
app.use((req, res, next) => {
const start = Date.now();
res.on('finish', () => {
const ms = Date.now() - start;
logger.info(`${req.method} ${req.url} ${res.statusCode} ${ms}ms`);
});
next();
});
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerDocument));
app.listen(3000, () => logger.info('Server listening on 3000'));
journalctl -u myapp -f/etc/systemd/journald.conf 中设置 Storage=persistent 并重启 systemd-journaldjournalctl --vacuum-time=7d 或 --vacuum-size=500M/var/log/myapp/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0644 myapp myapp
sharedscripts
postrotate
systemctl reload myapp >/dev/null 2>&1 || true
endscript
}
logrotate -d /etc/logrotate.d/myapp、logrotate -f /etc/logrotate.d/myapp。三 运行监控与可用性检查
四 常见场景与配置要点