13397158231   jevian_ma@worldflying.cn

更新用于pm2的自建logsys.js

2019-12-05 17:36:16

更新用于pm2的自建logsys.js,本脚本可以根据文件大小对日志进行滚动。

const { exec } = require('child_process')
const fs = require("fs");

const logpath = 'logs/'
const logsize = 512*1024
const lognum = 30
const workinterval = 30

function getfilesize (filepath) {
    return new Promise (function (resolve, reject) {
        fs.stat(filepath, function(err, stats) {
            if (err) {
                resolve (0)
                return
            }
            resolve (stats.size)
        })
    })
}

function readdir (dir) {
    return new Promise (function (resolve, reject) {
        fs.readdir (dir, function (err, files) {
            if (err) {
                console.log ('readdir', err)
                resolve (null)
                return
            }
            resolve (files)
        })
    })
}

function unlink (filepath) {
    return new Promise (function (resolve, reject) {
        fs.unlink(filepath, function(err) {
            resolve ()
        })
    })
}

function rename (oldpath, newpath) {
    return new Promise (function (resolve, reject) {
        fs.rename (oldpath, newpath, function(err) {
            resolve ()
        })
    })
}

async function main () {
    let needreload = false
    let files = await readdir (logpath)
    if (files == null) {
        return
    }
    for (let i = 0, len = files.length ; i < len ; i++) {
        let fname = files[i]
        let suffix = fname.substr (-4)
        if (suffix !== '.log') {
            continue
        }
        let proclog = logpath + fname
        let size = await getfilesize (proclog)        
        if (size > logsize) {
            needreload = true
            await unlink (proclog + lognum)
            let j = lognum
            while (j > 0) {
                let k = j - 1
                await rename (proclog + k, proclog + j)
                j = k
            }
            await rename (proclog, proclog + '0')
        }
    }
    if (needreload) {
        exec ('pm2 reloadLogs', function () {})
    }
}

main ()
setInterval (function () {
    main ()
}, workinterval*1000)


文章作者:沃航科技

优秀产品推荐:可编程网络IO控制器

上一篇:解决docker的容器通过putty连接中文识别错误的问题

下一篇:超高性能的vpn软件 --- wfvpn

联系我们

  • 地址:武汉市东湖高新开发区光谷总部国际1栋2412室
  • QQ:932773931
  • 电话:027-59761089-806
  • 手机:13397158231
  • 邮箱:jevian_ma@worldflying.cn

关注公众号

扫码添加微信

沃航(武汉)科技有限公司版权所有

备案号:鄂ICP备16014230号-1

本网站由提供CDN加速/云存储服务