Foreback
现在nodejs在服务器上使用越来越广了,常用的框架有express、koa、eggjs等,nodejs进程管理工具是pm2。 下面就说下nodejs在实战中的日志管理
日志管理一般有两种,一种是上传到日志服务器,一种是本地保存。 每个公司实现情况不一样,下面只说下本地保存的方案。
基础pm2的日志切割
使用pm2自带的日志切割插件,pm2-logrotate,
安装
# CLI配置pm2 set pm2-logrotate:复制代码
// ~/.pm2/module_conf.json{ "pm2-logrotate": { "compress": "true", "rotateInterval": "0 0 * * *", "retain": "30", "workInterval": "7200", "max_size": "1G" }}复制代码
pm2-logratote安装部署也方便,但在实际使用过程中,经常出现内存使用过高的情况。
logrotate - linux自带的切割工具
logrotate是linux(centos)自带的一款日志切割工具,使用范围上更加宽,不只局限于nodejs的。 不过对于前端工程师而言,还需要额外懂一些linux方面知识。
下面是典型的lorotate的配置文件示例:
# logrotate.confrotate 8 # 保留多少历史文件dateext # 日志加上时间,默认为文件名后加上-%Y%m%d#自定义时间格式,更精细的命名可以放在postrotate里dateformat -%Y%m%d.log missingok # 找不到日志可以忽略notifempty # 空日志不处理compress sharedscripts # 多个日志滚动后,postrotate里的脚本只执行一次,即共享了这个脚本# 新建日志模式,与下面的复制模式二选一createcreate 0664 root root# 复制原日志模式#copytruncate/data/app-node/logs/app-node-log.log/data/app-node/logs/app-node-out.log/data/app-node/logs/app-node-err.log { prerotate # 把错误日志发送到负责人邮箱 cat err.log > mail -s 'err' $mailaddress endscript # 若采用create模式,则有的应用需要重启,比如PM2 postrotate pm2 reload app > /dev/null 2>&1 & endscript}复制代码
更具体的配置细节可以看下面的参考文章,这里说下里面create模式与copy模式的细节不同
create
create模式会把之前的log文件重命名,然后再重建一个。前后两个文件名虽然一样,但inode不一样了,所以如果是使用pm2管理,还需要重启下pm2。
两者,我们在创建新log时,会指定文件权限,文件权限需要保证pm2进程是有读写权限的
copy
copy模式相对配置简单些。 实现细节是把Log日志copy一份,再把原先的日志内容清空。
好处是不需要重启Pm2,缺点是从copy到清空这一时间段的日志是会丢失的。
部署
部署时我们可以采用定时运行服务- crontab -e
,添加一条定时任务,一般都是选在23:59分进行。
23 59 * * * /usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1复制代码
参考文章: