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