remove Logger class, resolve logger object on Ajv ctor instead

master
Meir Rotstein 2017-11-19 23:02:08 +02:00
parent e0c7eac50d
commit 5ba22a36aa
4 changed files with 25 additions and 175 deletions

View File

@ -10,7 +10,6 @@ var compileSchema = require('./compile')
, $dataMetaSchema = require('./$data')
, patternGroups = require('./patternGroups')
, util = require('./compile/util')
, Logger = require('./compile/logger')
, co = require('co');
module.exports = Ajv;
@ -479,10 +478,15 @@ function getMetaSchemaOptions(self) {
}
function setLogger(self) {
var loggerObj;
var noop = function(){};
if(self._opts.logger === false) loggerObj = null;
if(typeof self._opts.logger === 'object') loggerObj = self._opts.logger;
self.logger = new Logger(loggerObj);
if(self._opts.logger === false) {
self.logger = {log: noop, warn: noop, error: noop};
} else if(typeof self._opts.logger === 'object') {
if (!(self._opts.logger.log && self._opts.logger.warn && self._opts.logger.error))
throw new Error('logger must implement log, warn and error functions');
self.logger = self._opts.logger;
} else {
self.logger = console;
}
}

View File

@ -1,41 +0,0 @@
'use strict';
module.exports = Logger;
/**
* @constructor
* @this Logger
* @param {*=} loggerObj logger object, expected to implement log, warn and error, if not given global console will be taken.
*/
function Logger(loggerObj) {
if(loggerObj && typeof loggerObj === 'object')
this.logger = loggerObj;
else if(typeof loggerObj === 'undefined')
this.logger = typeof console === 'object' ? console : {log: noop, warn: noop, error: noop};
else
this.logger = null;
}
Logger.prototype.log = function() {
_logFunc.call(this, 'log', arguments);
};
Logger.prototype.warn = function() {
_logFunc.call(this, 'warn', arguments);
};
Logger.prototype.error = function() {
_logFunc.call(this, 'error', arguments);
};
/**
* @this Logger
* @param {String} level log level - log, warn or error
* @param {Array} args log argumets
* @private
*/
function _logFunc(level, args) {
if(this.logger && this.logger[level]) this.logger[level].apply(this, args);
}
function noop() {}

View File

@ -1,110 +0,0 @@
'use strict';
var Logger = require('../lib/compile/logger')
, should = require('./chai').should();
describe('logger object tests', function() {
var logger;
var origConsoleWarn = console.warn;
var origConsoleLog = console.log;
var origConsoleError = console.error;
var consoleWarnCalled = false;
var consoleLogCalled = false;
var consoleErrorCalled = false;
beforeEach(function() {
console.warn = function() {
consoleWarnCalled = true;
origConsoleWarn.apply(console, arguments);
};
console.log = function() {
consoleLogCalled = true;
origConsoleLog.apply(console, arguments);
};
console.error = function() {
consoleErrorCalled = true;
origConsoleError.apply(console, arguments);
return 'boo';
};
});
afterEach(function() {
console.warn = origConsoleWarn;
console.log = origConsoleLog;
console.error = origConsoleError;
consoleErrorCalled = consoleLogCalled = consoleWarnCalled = false;
});
it('logger should log into global console by default', function() {
logger = new Logger();
logger.log('42');
logger.warn('42');
logger.error('42');
should.equal(consoleWarnCalled, true);
should.equal(consoleLogCalled, true);
should.equal(consoleErrorCalled, true);
});
it('logger should log only into a custom logger if given', function() {
var customWarnCalled = false;
var customLogCalled = false;
var customErrorCalled = false;
var customLogger = {
warn: function() {
customWarnCalled = true;
},
log: function() {
customLogCalled = true;
},
error: function() {
customErrorCalled = true;
}
};
logger = new Logger(customLogger);
logger.log('42');
logger.warn('42');
logger.error('42');
should.equal(consoleWarnCalled, false);
should.equal(consoleLogCalled, false);
should.equal(consoleErrorCalled, false);
should.equal(customWarnCalled, true);
should.equal(customLogCalled, true);
should.equal(customErrorCalled, true);
});
it('if a custom logger is given without basic logging functions implementations it should not leads to an exception', function() {
logger = new Logger({});
logger.log('42');
logger.warn('42');
logger.error('42');
should.equal(consoleWarnCalled, false);
should.equal(consoleLogCalled, false);
should.equal(consoleErrorCalled, false);
});
it('if a custom logger is set to null logging should be disabled', function() {
logger = new Logger(null);
logger.log('42');
logger.warn('42');
logger.error('42');
should.equal(consoleWarnCalled, false);
should.equal(consoleLogCalled, false);
should.equal(consoleErrorCalled, false);
});
});

View File

@ -1261,6 +1261,12 @@ describe('Ajv Options', function () {
var logger = {
warn: function() {
loggerCalled = true;
},
log: function() {
loggerCalled = true;
},
error: function() {
loggerCalled = true;
}
};
@ -1278,25 +1284,7 @@ describe('Ajv Options', function () {
should.equal(consoleCalled, false);
});
it('custom logger is an object but not implements the basic functions - make sure that it not leads to an error', function() {
var logger = {};
var ajv = new Ajv({
meta: false,
logger: logger
});
ajv.compile({
schema: { type: 'number' },
minimum: 1
});
should.equal(consoleCalled, false);
});
it('logger option is false - no logs should be reported', function() {
var ajv = new Ajv({
meta: false,
logger: false
@ -1310,5 +1298,14 @@ describe('Ajv Options', function () {
should.equal(consoleCalled, false);
});
it('logger option is an object but not implmemting the console functions - an error should be raised', function() {
(function(){
new Ajv({
meta: false,
logger: {}
});
}).should.throw(Error, /logger must implement log, warn and error function/);
});
});
});