From 8fc59e641dc1a22a68c4df5a186871385773bf97 Mon Sep 17 00:00:00 2001 From: fengmk2 Date: Sun, 21 Jan 2024 21:47:14 +0800 Subject: [PATCH] feat: auto set custom logger with onelogger https://github.com/node-modules/onelogger pick from https://github.com/eggjs/egg/pull/5287 --- lib/core/logger.js | 16 ++++++++-- package.json | 1 + .../apps/custom-logger/app/public/router.js | 11 +++++++ test/lib/core/logger.test.js | 30 +++++++++++++++++-- 4 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 test/fixtures/apps/custom-logger/app/public/router.js diff --git a/lib/core/logger.js b/lib/core/logger.js index e555227603..e1637088fd 100644 --- a/lib/core/logger.js +++ b/lib/core/logger.js @@ -1,6 +1,7 @@ 'use strict'; -const Loggers = require('egg-logger').EggLoggers; +const { EggLoggers } = require('egg-logger'); +const { setCustomLogger } = require('onelogger'); module.exports = function createLoggers(app) { const loggerConfig = app.config.logger; @@ -10,7 +11,7 @@ module.exports = function createLoggers(app) { loggerConfig.level = 'INFO'; } - const loggers = new Loggers(app.config); + const loggers = new EggLoggers(app.config); // won't print to console after started, except for local and unittest app.ready(() => { @@ -18,6 +19,17 @@ module.exports = function createLoggers(app) { loggers.disableConsole(); } }); + + // set global logger + for (const loggerName of Object.keys(loggers)) { + setCustomLogger(loggerName, loggers[loggerName]); + } + // reset global logger on beforeClose hook + app.beforeClose(() => { + for (const loggerName of Object.keys(loggers)) { + setCustomLogger(loggerName, undefined); + } + }); loggers.coreLogger.info('[egg:logger] init all loggers with options: %j', loggerConfig); return loggers; diff --git a/package.json b/package.json index ae425a7e40..7a2db1b964 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "ms": "^2.1.1", "mz": "^2.7.0", "on-finished": "^2.3.0", + "onelogger": "^1.0.0", "semver": "^7.3.2", "sendmessage": "^1.1.0", "urllib": "^2.33.0", diff --git a/test/fixtures/apps/custom-logger/app/public/router.js b/test/fixtures/apps/custom-logger/app/public/router.js new file mode 100644 index 0000000000..b6a18d197c --- /dev/null +++ b/test/fixtures/apps/custom-logger/app/public/router.js @@ -0,0 +1,11 @@ +const { getCustomLogger, getLogger } = require('onelogger'); + +module.exports = app => { + app.get('/', async ctx => { + const myLogger = getCustomLogger('myLogger', 'custom-logger-label'); + const logger = getLogger(); + myLogger.info('hello myLogger'); + logger.warn('hello logger'); + ctx.body = { ok: true }; + }); +}; diff --git a/test/lib/core/logger.test.js b/test/lib/core/logger.test.js index d2eccc32a7..6b5e398801 100644 --- a/test/lib/core/logger.test.js +++ b/test/lib/core/logger.test.js @@ -10,8 +10,14 @@ const utils = require('../../utils'); describe('test/lib/core/logger.test.js', () => { let app; - afterEach(mm.restore); - afterEach(() => sleep(5000).then(() => app.close())); + afterEach(async () => { + if (app) { + await utils.sleep(3000); + await app.close(); + app = null; + } + await mm.restore(); + }); it('should got right default config on prod env', async () => { mm.env('prod'); @@ -237,4 +243,24 @@ describe('test/lib/core/logger.test.js', () => { }); }); }); + + describe('onelogger', () => { + let app; + before(() => { + app = utils.app('apps/custom-logger'); + return app.ready(); + }); + after(() => app.close()); + + it('should work with onelogger', async () => { + await app.httpRequest() + .get('/') + .expect({ + ok: true, + }) + .expect(200); + app.expectLog('[custom-logger-label] hello myLogger', 'myLogger'); + app.expectLog('hello logger'); + }); + }); });