egg-logrotator
LogRotator for egg. Rotate all file of app.loggers
by default
Install
$ npm i egg-logrotator
Usage
exports.logrotator = {
enable: true,
package: 'egg-logrotator',
};
exports.logrotator = {
filesRotateByHour: [],
hourDelimiter: '-',
filesRotateBySize: [],
maxFileSize: 50 * 1024 * 1024,
maxFiles: 10,
rotateDuration: 60000,
maxDays: 31,
};
Feature
By default, LogRotator will rotate all files of app.loggers
at 00:00 everyday, the format is .log.YYYY-MM-DD
(egg-web.log.2016-09-30
).
By Size
Rotate by size with config filesRotateBySize
. when the file size is greater than maxFileSize
, it will rename to .log.1
.
If the file you renamed to is exists, it will increment by 1 (.log.1
-> .log.2
), until maxFiles
. if it reaches the maxFiles
, then overwrite .log.${maxFiles}
.
Files in filesRotateBySize
won't be rotated by day.
If file
is relative path, then will normalize to path.join(this.app.config.logger.dir, file)
.
By Hour
Rotate by hour with config filesRotateByHour
. rotate the file at 00 every hour, the format is .log.YYYY-MM-DD-HH
.
Files in filesRotateByHour
won't be rotated by day.
If file
is relative path, then will normalize to path.join(this.app.config.logger.dir, file)
.
Customize
You can use app.LogRotator
to customize.
module.exports = app => {
const rotator = getRotator(app);
return {
schedule: {
type: 'worker',
cron: '10 * * * *',
},
async task() {
await rotator.rotate();
}
};
};
function getRotator(app) {
class CustomRotator extends app.LogRotator {
async getRotateFiles() {
const files = new Map();
const srcPath = '/home/admin/foo.log';
const targetPath = '/home/admin/foo.log.2016.09.30';
files.set(srcPath, { srcPath, targetPath });
return files;
}
}
return new CustomRotator({ app });
}
Define a method called getRotateFiles
, return a map contains a pair of srcPath and targetPath.
Questions & Suggestions
Please open an issue here.
License
MIT