Strapi 日志管理教程:配置日志等级并实现日志轮转

217 阅读4分钟

最近的项目里,因为公司采买的服务器内存比较小,所以需要考虑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 日志等级、启用文件轮转和压缩,我们可以更高效地管理日志,防止不必要的日志占用服务器存储空间,从而减轻服务器压力。定期清理过期日志文件能够进一步确保服务器的良好状态。