# node - 日志管理
# morgan
morgan
是 express
默认的日志中间件,也可以脱离 express
,作为 node.js
的日志组件单独使用。
# 栗子
- 安装依赖
npm install express morgan
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
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
2
# 日志格式
morgan
使用到的 API 基本只有一个 morgan(format, options)
,栗子里已经使用了。
参数说明如下:
- format:可选,
morgan
预定义了几种日志格式,每种格式都有对应的名称,比如combined
、short
等,默认是default
。不同格式的差别可参考 (opens new window)。 - options:可选,配置项,包含stream(常用)、skip、immediate。
- stream:日志的输出流配置,默认是process.stdout。
- skip:是否跳过日志记录,使用方式可以参考这里。
- immediate:布尔值,默认是false。当为true时,一收到请求,就记录日志;如果为false,则在请求返回后,再记录日志。
# pm2-logrotate
pm2-logrotate
是 pm2
的插件,用于自动切割日志,管理日志大小和数量等。
# 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 | 日志日期格式 |
# 安装和使用
- 安装
pm2 install 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
来查看详细的配置。