您好,欢迎访问沃航(武汉)科技有限公司官方网站
更新用于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)


文章作者:沃航科技

联系我们
地址:
武汉市洪山区蓝晶国际7栋903
QQ:
932773931
电话:
027-59761089-806
手机:
13397158231
邮箱:
jevian_ma@worldflying.cn
×
物联网组态平台
试用账号:123456
试用密码:123456
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn
×
积木编程平台
试用方式:试用手机号码注册即可使用
如需测试更多功能或者有疑问可发送邮件至:jevian_ma@worldflying.cn