更新用于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)文章作者:沃航科技