Nodejs日志管理之日志切割

Foreback

现在nodejs在服务器上使用越来越广了,常用的框架有express、koa、eggjs等,nodejs进程管理工具是pm2。 下面就说下nodejs在实战中的日志管理

日志管理一般有两种,一种是上传到日志服务器,一种是本地保存。 每个公司实现情况不一样,下面只说下本地保存的方案。

基础pm2的日志切割

使用pm2自带的日志切割插件,pm2-logrotate,

安装
# CLI配置
pm2 set pm2-logrotate:<param> <value>
复制代码
// ~/.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.conf
rotate 8  # 保留多少历史文件
dateext   # 日志加上时间,默认为文件名后加上-%Y%m%d
#自定义时间格式,更精细的命名可以放在postrotate里
dateformat -%Y%m%d.log  
missingok # 找不到日志可以忽略
notifempty # 空日志不处理
compress  
sharedscripts # 多个日志滚动后,postrotate里的脚本只执行一次,即共享了这个脚本

# 新建日志模式,与下面的复制模式二选一
create
create 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
复制代码

参考文章:

  1. support.rackspace.com/how-to/unde…
  2. www.lightxue.com/how-logrota…
  3. github.com/pm2-hive/pm…
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值