PM2 日志排错及自动旋转

阅读时长 6 分钟读完

PM2 是一款流行的 Node.js 进程管理器,它可以用于监控和管理 Node.js 程序运行状态。除了进程管理之外,PM2 还提供了日志管理的功能,使我们能够方便地查看程序的运行日志。本文将介绍如何使用 PM2 进行日志管理,包括如何排错和自动旋转日志文件。

日志管理

在 Node.js 程序中,我们可以使用 console.log 或其他类似方法来输出日志,并把这些日志信息保存到文件中。但是,直接将日志信息输出到一个单一的文件中,可能会导致该文件变得非常大。此外,如果程序运行出现了错误,我们需要查看日志文件来获取错误信息。因此,我们需要一个更好的日志管理系统来帮助我们更好地管理程序日志。

PM2 中日志管理的配置

在 PM2 中,我们可以通过 pm2 logs 命令查看所有程序的日志。如果我们想要为某个程序单独设置日志文件,则可以在启动或停止该程序时使用 --log 参数指定日志文件的路径。例如,如果我们要把程序的日志保存到 /path/to/program.log 文件中,则可以像下面这样启动程序:

上述命令中,/path/to/program.js 是程序的入口文件,my_program 是程序的名称。--log 参数指定了程序的日志文件路径。

在 PM2 的配置文件中,我们还可以指定其他的日志管理选项。下面是一个 PM2 配置文件的示例:

-- -------------------- ---- -------
-
  ------- -------------
  --------- ----------------------
  ------------ --
  ------------------ ----------- ----------
  ------------- -----------------------------
  ----------- ---------------------------
  ----------- --------------------------------
  ------------- -----
  -------- -----
-

在上述配置文件中,namescriptinstances 是程序的基本信息,这里不再赘述。以下是其他几个与日志管理相关的配置:

  • log_date_format:指定日志文件中日期的格式。
  • error_file:程序错误日志文件的路径。
  • out_file:程序输出日志文件的路径。
  • log_file:程序所有日志文件的路径,如果设置了 error_fileout_file,则该参数可以省略。
  • merge_logs:是否合并程序的错误日志和输出日志到同一个文件中,如果为 true,则 error_fileout_file 选项将被忽略。
  • watch:是否监视程序的文件变化并重启程序,默认为 false

日志旋转

在日志管理中,日志文件的大小会随着使用时间增加而增大。如果不对日志进行定期清理和压缩,将会占用大量的磁盘空间。此外,大型日志文件对于日志分析和检索也会带来很多不便。因此,我们需要对日志文件进行定期旋转,将旧日志文件压缩并重命名为新的文件,从而方便日后查找和管理。

在 PM2 中,我们可以通过设置 logrotate 配置来定期旋转日志文件。下面是一个 PM2 配置文件的示例:

-- -------------------- ---- -------
-
  ------- -------------
  --------- ----------------------
  ------------ --
  ------------------ ----------- ----------
  ------------- -----------------------------
  ----------- ---------------------------
  ------------ -
    ----------------- -----
    ---------- ------
    --------- --
  -
-

在上述配置文件中,logrotate 是一个对象,包含三个选项:

  • rotateInterval:日志旋转的时间间隔,默认为 1d,表示每天旋转一次日志文件。也可以设置为其他字符串,比如 1h1w 等,分别表示每小时、每周旋转一次日志文件。
  • maxSize:日志文件的最大大小,默认为 10M,表示当日志文件大小到达 10MB 时,就会触发旋转操作。
  • retain:旧日志文件的保留数量,默认为 10,表示只保留最近的 10 个日志文件,其他日志文件将被删除。

日志分析

在程序运行过程中,我们需要不断地分析和监测日志文件,以便快速发现和解决问题。在 PM2 中,我们可以使用多种工具和方式来分析日志。

PM2 Monit

PM2 提供了一个 Web 界面,可以使用 pm2 monit 命令打开。在该界面中,我们可以查看程序的运行状态、CPU 和内存占用等信息。另外,该界面还提供了一个日志终端,可以查看程序的所有日志信息。

PM2 Logrotate

在 PM2 的日志管理中,我们设置了 maxSizeretain 选项,这些选项会触发日志旋转操作。旋转后的日志文件会被保存到一个新的文件中,并被重命名为类似 program_out.log.2021-06-01 的格式。我们可以使用 pm2 logrotate 命令来手动旋转日志文件。

大数据处理

如果日志文件非常大,并且我们需要对其中的内容进行复杂的数据处理,可以使用诸如 grepawksed 等命令进行过滤和处理。例如,下面的命令可以从日志文件中查找出所有包含 error 关键词的行:

示例代码

下面是一个简单的 Node.js 程序,输出一些日志信息到控制台,并保存到日志文件中。我们可以使用 PM2 来启动该程序,并查看其日志信息。

-- -------------------- ---- -------
-- ------

----- -- - -------------

----- ------- - ---------

-------- -------- -
    ----- --- - --- ------
    ----- ------ - ----------------------- ---------
    -------------------
    ---------------------- ------- ----- -- -
        -- ----- --------------------- -- ----- ------ ----
    --
-

-------- ---------
-------------- -- -------- -- ---------- -----

我们可以使用 PM2 来启动该程序,并设置日志文件。

然后,我们可以使用 PM2 Monit 来查看程序的状态、日志和其他信息。

除此之外,我们还可以在代码中使用第三方模块,如 morganwinston 等来进一步优化日志管理。

总结

PM2 是一款强大的 Node.js 进程管理器,除了进程管理外,它还提供了日志管理的功能,使我们能够方便地查看程序的运行日志。在程序开发和维护过程中,日志管理是非常重要的一环。通过本文的介绍,你应该了解了如何使用 PM2 进行日志管理,包括日志配置、日志旋转和日志分析等方面。在实际使用中,我们还需要根据自己的需求做出相应的调整和优化。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6475b187968c7c53b02b3ce0

纠错
反馈