博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nodejs日志管理之日志切割
阅读量:6695 次
发布时间:2019-06-25

本文共 1679 字,大约阅读时间需要 5 分钟。

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复制代码

参考文章:

转载地址:http://cmvoo.baihongyu.com/

你可能感兴趣的文章
LoadRunner使用之变量参数化
查看>>
asp.net运行原理
查看>>
canvas实现芝麻信用评分效果
查看>>
053(五十三)
查看>>
【Spark篇】---Spark中yarn模式两种提交任务方式
查看>>
最短路专题解题报告
查看>>
什么是FSO
查看>>
批处理程序如何接受多个文件拖入?开启了变量延迟enabledelayedexpansion之后遇到感叹号要怎么处理?...
查看>>
java中判断一个字符串是否“都为数字”和“是否包含数字”和“截取数字”
查看>>
Python 3
查看>>
实现主从关系Form中汇总行金额/数量
查看>>
Python学习笔记:协程
查看>>
原生js完成拼图小游戏
查看>>
[Algorithms] Radix Sort
查看>>
Eclipse打jar包的方法
查看>>
[WP7]关于退出时确认对话框的实现
查看>>
每日一记--迷茫
查看>>
mybatis like 查询
查看>>
Centos硬件信息
查看>>
Maven 打包
查看>>