class Task { context delayTime name logger fileLogger constructor(taskName, delayTime, initFun, onTickFun, logFilePath='task.log') { this.name = taskName this.delayTime = delayTime this.init = initFun this.onTick = onTickFun this.consoleLoggerInit() this.fileLoggerInit(logFilePath) } consoleLoggerInit() { const log4js = require('log4js') this.logger = log4js.getLogger(this.name) this.logger.level = log4js.levels.TRACE } fileLoggerInit(logFilePath) { const log4js = require('log4js') log4js.configure({ appenders: { main: { type: 'file', filename: logFilePath } }, categories: { default: { appenders: ['main'], level: log4js.levels.TRACE } } }) this.fileLogger = log4js.getLogger(this.name) this.fileLogger.level = log4js.levels.TRACE } async Start() { const task = this this.logger.info(`Init context or others.`) await this.init() this.logger.info(`Dida dida dida, on tick, on tick...`) this.interval = setInterval(async () => { try { await task.onTick() } catch (e) { task.logger.error(e) } }, this.delayTime) } async Stop() { clearInterval(this.interval) } } module.exports = Task