From f1b510c34039259c5772021432ab71a7a62b89e8 Mon Sep 17 00:00:00 2001 From: fengmk2 Date: Mon, 12 Jun 2017 18:17:05 +0800 Subject: [PATCH] feat: add config.logger.disableConsoleAfterReady (#1001) let app can change the logger config --- config/config.default.js | 2 ++ lib/core/logger.js | 2 +- test/lib/core/config/config.test.js | 2 +- test/lib/core/loader/config_loader.test.js | 3 ++- test/lib/core/logger.test.js | 9 ++++++--- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/config/config.default.js b/config/config.default.js index f9f413badc..9a402c3688 100644 --- a/config/config.default.js +++ b/config/config.default.js @@ -200,6 +200,7 @@ module.exports = appInfo => { * @property {String} encoding - log file encloding, defaults to utf8 * @property {String} level - default log level, could be: DEBUG, INFO, WARN, ERROR or NONE, defaults to INFO in production * @property {String} consoleLevel - log level of stdout, defaults to INFO in local serverEnv, defaults to WARN in unittest, defaults to NONE elsewise + * @property {Boolean} disableConsoleAfterReady - disable logger console after app ready. defaults to `false` on local and unittest env, others is `true`. * @property {Boolean} outputJSON - log as JSON or not, defaults to false * @property {Boolean} buffer - if enabled, flush logs to disk at a certain frequency to improve performance, defaults to true * @property {String} errorLogName - file name of errorLogger @@ -213,6 +214,7 @@ module.exports = appInfo => { env: appInfo.env, level: 'INFO', consoleLevel: 'INFO', + disableConsoleAfterReady: appInfo.env !== 'local' && appInfo.env !== 'unittest', outputJSON: false, buffer: true, appLogName: `${appInfo.name}-web.log`, diff --git a/lib/core/logger.js b/lib/core/logger.js index ec58f1ee1b..49162ff0ea 100644 --- a/lib/core/logger.js +++ b/lib/core/logger.js @@ -14,7 +14,7 @@ module.exports = function createLoggers(app) { // won't print to console after started, except for local and unittest app.ready(() => { - if (app.config.env !== 'local' && app.config.env !== 'unittest') { + if (loggerConfig.disableConsoleAfterReady) { loggers.disableConsole(); } }); diff --git a/test/lib/core/config/config.test.js b/test/lib/core/config/config.test.js index cd90ffb9b7..9bd21dfda5 100644 --- a/test/lib/core/config/config.test.js +++ b/test/lib/core/config/config.test.js @@ -1,7 +1,6 @@ 'use strict'; const assert = require('assert'); - const mm = require('egg-mock'); const utils = require('../../../utils'); @@ -17,5 +16,6 @@ describe('test/lib/core/config/config.test.js', () => { it('should return config.name', () => { assert(app.config.name === 'demo'); + assert(app.config.logger.disableConsoleAfterReady === false); }); }); diff --git a/test/lib/core/loader/config_loader.test.js b/test/lib/core/loader/config_loader.test.js index 3419bad1e4..e0967c08c4 100644 --- a/test/lib/core/loader/config_loader.test.js +++ b/test/lib/core/loader/config_loader.test.js @@ -1,7 +1,6 @@ 'use strict'; const assert = require('assert'); - const path = require('path'); const mm = require('egg-mock'); const utils = require('../../../utils'); @@ -31,6 +30,7 @@ describe('test/lib/core/loader/config_loader.test.js', () => { app = utils.app('apps/demo'); yield app.ready(); assert.deepEqual(app.config.logger.dir, utils.getFilepath('apps/demo/logs/demo')); + assert(app.config.logger.disableConsoleAfterReady === false); }); it('should get logger dir when default', function* () { @@ -39,5 +39,6 @@ describe('test/lib/core/loader/config_loader.test.js', () => { app = utils.app('apps/demo'); yield app.ready(); assert.deepEqual(app.config.logger.dir, path.join(home, 'logs/demo')); + assert(app.config.logger.disableConsoleAfterReady === true); }); }); diff --git a/test/lib/core/logger.test.js b/test/lib/core/logger.test.js index 8f54f637df..efbc03c1c1 100644 --- a/test/lib/core/logger.test.js +++ b/test/lib/core/logger.test.js @@ -7,7 +7,6 @@ const mm = require('egg-mock'); const request = require('supertest'); const Logger = require('egg-logger'); const sleep = require('mz-modules/sleep'); - const utils = require('../../utils'); describe('test/lib/core/logger.test.js', () => { @@ -28,6 +27,7 @@ describe('test/lib/core/logger.test.js', () => { assert(app.logger.get('console').options.level === Logger.INFO); assert(app.coreLogger.get('file').options.level === Logger.INFO); assert(app.coreLogger.get('console').options.level === Logger.INFO); + assert(app.config.logger.disableConsoleAfterReady === true); }); it('should got right level on local env', function* () { @@ -40,6 +40,7 @@ describe('test/lib/core/logger.test.js', () => { assert(app.logger.get('console').options.level === Logger.INFO); assert(app.coreLogger.get('file').options.level === Logger.INFO); assert(app.coreLogger.get('console').options.level === Logger.WARN); + assert(app.config.logger.disableConsoleAfterReady === false); }); it('should set EGG_LOG level on local env', function* () { @@ -52,7 +53,7 @@ describe('test/lib/core/logger.test.js', () => { assert(app.logger.get('console').options.level === Logger.ERROR); assert(app.coreLogger.get('file').options.level === Logger.INFO); assert(app.coreLogger.get('console').options.level === Logger.ERROR); - return app.ready(); + assert(app.config.logger.disableConsoleAfterReady === false); }); it('should got right config on unittest env', function* () { @@ -65,7 +66,7 @@ describe('test/lib/core/logger.test.js', () => { assert(app.logger.get('console').options.level === Logger.WARN); assert(app.coreLogger.get('file').options.level === Logger.INFO); assert(app.coreLogger.get('console').options.level === Logger.WARN); - return app.ready(); + assert(app.config.logger.disableConsoleAfterReady === false); }); it('should set log.consoleLevel to env.EGG_LOG', function* () { @@ -82,6 +83,7 @@ describe('test/lib/core/logger.test.js', () => { mm(process.env, 'EGG_LOG', 'NONE'); app = utils.app('apps/nobuffer-logger'); yield app.ready(); + assert(app.config.logger.disableConsoleAfterReady === false); const ctx = app.mockContext(); const logfile = path.join(app.config.logger.dir, 'common-error.log'); @@ -102,6 +104,7 @@ describe('test/lib/core/logger.test.js', () => { app = utils.app('apps/mock-production-app'); yield app.ready(); + assert(app.config.logger.disableConsoleAfterReady === true); const ctx = app.mockContext(); const logfile = path.join(app.config.logger.dir, 'common-error.log'); // app.config.logger.buffer.should.equal(true);