AppLogger.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. const fs = require('fs-extra');
  2. const Logger = require('./Logger');
  3. let instance = null;
  4. //singleton
  5. class AppLogger {
  6. constructor() {
  7. if (!instance) {
  8. this.inited = false;
  9. this.logFileName = '';
  10. this.errLogFileName = '';
  11. this.fatalLogFileName = '';
  12. instance = this;
  13. }
  14. return instance;
  15. }
  16. async init(config) {
  17. if (this.inited)
  18. throw new Error('already inited');
  19. let loggerParams = null;
  20. if (config.loggingEnabled) {
  21. await fs.ensureDir(config.logDir);
  22. this.logFileName = `${config.logDir}/${config.name}.log`;
  23. this.errLogFileName = `${config.logDir}/${config.name}.err.log`;
  24. this.fatalLogFileName = `${config.logDir}/${config.name}.fatal.log`;
  25. loggerParams = [
  26. {log: 'ConsoleLog'},
  27. {log: 'FileLog', fileName: this.logFileName},
  28. {log: 'FileLog', fileName: this.errLogFileName, exclude: [LM_OK, LM_INFO, LM_TOTAL]},
  29. {log: 'FileLog', fileName: this.fatalLogFileName, exclude: [LM_OK, LM_INFO, LM_WARN, LM_ERR, LM_TOTAL]},//LM_FATAL only
  30. ];
  31. } else {
  32. loggerParams = [
  33. {log: 'ConsoleLog'},
  34. ];
  35. }
  36. this._logger = new Logger(loggerParams);
  37. this.inited = true;
  38. return this.logger;
  39. }
  40. get logger() {
  41. if (!this.inited)
  42. throw new Error('not inited');
  43. return this._logger;
  44. }
  45. get log() {
  46. const l = this.logger;
  47. return l.log.bind(l);
  48. }
  49. }
  50. module.exports = AppLogger;