# node - 日志管理

# morgan

morganexpress 默认的日志中间件,也可以脱离 express,作为 node.js 的日志组件单独使用。

# 栗子

  1. 安装依赖
npm install express morgan
1
  1. 添加示例代码
const express = require('express');
const app = express();
const morgan = require('morgan');

app.use(morgan('short'));
app.use(function(req, res, next){
    res.send('ok');
});

app.listen(3000);
1
2
3
4
5
6
7
8
9
10

node app.js 运行程序,并访问服务 http://localhost:3000,日志打印如下

::1 - - [26/Sep/2021:07:35:16 +0000] "GET / HTTP/1.1" 304 - "-" "Mozilla/5.0"
::1 - - [26/Sep/2021:07:35:16 +0000] "GET /favicon.ico HTTP/1.1" 200 2 "http://localhost:3000/" "Mozilla/5.0"
1
2

# 日志格式

morgan 使用到的 API 基本只有一个 morgan(format, options),栗子里已经使用了。

参数说明如下:

  • format:可选,morgan 预定义了几种日志格式,每种格式都有对应的名称,比如 combinedshort 等,默认是 default。不同格式的差别可参考 (opens new window)
  • options:可选,配置项,包含stream(常用)、skip、immediate。
    • stream:日志的输出流配置,默认是process.stdout。
    • skip:是否跳过日志记录,使用方式可以参考这里。
    • immediate:布尔值,默认是false。当为true时,一收到请求,就记录日志;如果为false,则在请求返回后,再记录日志。

# pm2-logrotate

pm2-logrotatepm2 的插件,用于自动切割日志,管理日志大小和数量等。

# pm2 日志配置

默认情况下,pm2 已经会把日志记录在指定位置。并提供了几个配置选项,在 app.json 中配置即可

字段 类型 例子 描述
error_file (string) error 日志文件路径 (default to $HOME/.pm2/logs/XXXerr.log)
out_file (string) output 日志文件路径 (default to $HOME/.pm2/logs/XXXout.log)
pid_file (string) pid 文件路径 (default to $HOME/.pm2/pid/app-pm_id.pid)
merge_logs boolean true 如果是 true 日志文件会放在在一起,不根据进程 id 来区分
log_date_format (string) YYYY-MM-DD HH:mm Z 日志日期格式

# 安装和使用

  1. 安装
pm2 install pm2-logrotate
1
  1. 使用 安装好,之后就会直接已默认配置启用

pm2-logrotate

  1. 设置参数 pm2 set pm2-logrotate:{paramName} {value}
  • max_size:单个日志文件的大小,可以设置 10G, 10M, 10K
  • retain:保留的日志文件个数,比如设置为 10 ,那么在日志文件达到 10 个后会将最早的日志文件删除掉
  • compress:是否通过 gzip 压缩日志
  • dateFormat:日志文件名中的日期格式,默认是YYYY-MM-DD_HH-mm-ss,注意是设置的日志名+这个格式,如设置的日志名为abc.log,那就会生成abc_YYYY-MM-DD_HH-mm-ss.log名字的日志文件
  • rotateModule:把 pm2 本身的日志也进行分割
  • workerInterval:设置检查日志大小的时间间隔,单位秒,最小为1
  • rotateInterval:设置分割日志的时间,默认值是0 0 * * *,意思是每天晚上0点分割

设置完毕后可通过 pm2 conf pm2-logrotate 来查看详细的配置。

# 参考

上次更新: 9/26/2021, 4:16:24 PM