最近的项目里,因为公司采买的服务器内存比较小,所以需要考虑Strapi运行过程中产生的大量日志造成的负担,所以决定写一篇博客记录一下,本文将介绍如何在 Strapi 中配置自定义日志等级,启用文件轮转和日志压缩,以便高效管理日志文件,减轻服务器存储压力。
1. 配置 Strapi 的日志等级和文件轮转
Strapi 使用 Winston 作为日志管理库,允许我们自定义日志的输出方式和详细程度。我们可以设置日志的记录级别,启用每日文件轮转,并自动压缩旧日志。
修改 middlewares.js 文件
在 Strapi 项目的 config 目录下找到 middlewares.js 文件,或新建该文件,并添加如下配置:
const path = require("path");
const { format, transports } = require("winston");
require("winston-daily-rotate-file"); // 导入文件轮转插件
module.exports = [
"strapi::logger",
"strapi::errors",
"strapi::cors",
"strapi::poweredBy",
"strapi::session",
"strapi::favicon",
"strapi::public",
{
name: "strapi::security",
config: {
// 安全配置
enabled: true,
headers: {
contentSecurityPolicy: {
useDefaults: true,
directives: {
"img-src": ["'self'", "data:", "blob:", "your-image-source.com"],
"media-src": ["'self'", "data:", "blob:", "your-media-source.com"],
},
},
},
},
},
// 自定义日志管理配置
{
name: "strapi::logger",
config: {
level: "error", // 日志记录级别,可选值:'info'、'warn'、'error'、'debug'
transports: [
// 控制台输出
new transports.Console({
format: format.combine(format.colorize(), format.simple()),
}),
// 日志文件轮转
new transports.DailyRotateFile({
filename: path.join(__dirname, "../logs", "app-%DATE%.log"), // 日志文件路径
datePattern: "YYYY-MM-DD", // 每天生成一个新的日志文件
zippedArchive: true, // 启用日志压缩
maxSize: "20m", // 单个日志文件的最大大小为 20MB
maxFiles: "3d", // 保留最近3天的日志文件
}),
],
},
},
];
配置项详解
• level: 设置日志的输出级别。info 记录一般信息,warn 记录警告,error 记录错误,debug 记录调试信息。生产环境建议设置为 error 或 warn,避免过多的调试日志占用存储。
• transports: 定义日志的输出方式。在这里我们添加了两个 transports,分别是控制台输出和文件轮转输出。
• Console: 输出至控制台,方便在开发环境实时查看。
• DailyRotateFile: 使用 winston-daily-rotate-file 插件将日志按天轮转,每天生成一个新文件,并启用压缩。具体参数如下:
• filename: 日志文件路径,以 app-%DATE%.log 命名,其中 %DATE% 会自动替换为日期。
• datePattern: 按 YYYY-MM-DD 的格式生成日期,确保每天创建新日志文件。
• zippedArchive: 启用日志文件的压缩,以 .gz 格式压缩旧日志,节省存储空间。
• maxSize: 设置单个日志文件的最大大小为 20MB,避免单个文件过大。
• maxFiles: 保留最近 3 天的日志,超过 3 天的日志将自动删除。
2. 重启 Strapi 应用并验证配置
完成配置后,重新启动 Strapi 服务以使配置生效:
npm run develop
进入 Strapi 应用后,可以在控制台查看输出日志,也可以进入 logs 目录查看生成的日志文件。如果设置正确,每天会生成一个新日志文件,并在文件大小超过 20MB 时自动进行轮转,保留最近 3 天的日志。
3. 定期清理日志,避免存储堆积
通过上面的文件轮转和自动压缩配置,可以在一定程度上减少日志文件的堆积。但如果项目运行时间较长,仍可能产生大量日志。可以通过 cron 等计划任务定期清理 logs 文件夹,保持服务器的存储健康。
示例:使用 crontab 定期删除旧日志文件
在 Linux 系统中,可以使用 crontab 配置定期清理任务。例如,设置一个每周清理一次日志文件的任务:
crontab -e
在打开的文件中,添加以下行,使每周一凌晨清理日志:
0 0 * * 1 find /path/to/your/project/logs -type f -name "*.log" -mtime +3 -exec rm {} \;
请将 /path/to/your/project/ 替换为项目实际路径。-mtime +3 表示删除超过 3 天的日志文件。
总结
通过配置 Strapi 日志等级、启用文件轮转和压缩,我们可以更高效地管理日志,防止不必要的日志占用服务器存储空间,从而减轻服务器压力。定期清理过期日志文件能够进一步确保服务器的良好状态。