'use strict';
|
|
const moment = require('moment');
|
const fs = require('mz/fs');
|
const path = require('path');
|
const debug = require('debug')('egg-logrotator:hour_rotator');
|
const Rotator = require('./rotator');
|
|
|
// rotate log by hour
|
// rename from foo.log to foo.log.YYYY-MM-DD-HH
|
class DayRotator extends Rotator {
|
|
async getRotateFiles() {
|
const files = new Map();
|
const logDir = this.app.config.logger.dir;
|
const filesRotateByHour = this.app.config.logrotator.filesRotateByHour || [];
|
|
for (let logPath of filesRotateByHour) {
|
// support relative path
|
if (!path.isAbsolute(logPath)) logPath = path.join(logDir, logPath);
|
const exists = await fs.exists(logPath);
|
if (!exists) {
|
continue;
|
}
|
this._setFile(logPath, files);
|
}
|
|
return files;
|
}
|
|
get hourDelimiter() {
|
return this.app.config.logrotator.hourDelimiter;
|
}
|
|
_setFile(srcPath, files) {
|
if (!files.has(srcPath)) {
|
const targetPath = srcPath + moment().subtract(1, 'hours').format(`.YYYY-MM-DD${this.hourDelimiter}HH`);
|
debug('set file %s => %s', srcPath, targetPath);
|
files.set(srcPath, { srcPath, targetPath });
|
}
|
}
|
}
|
|
module.exports = DayRotator;
|