Skip to content

Commit

Permalink
2.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
nomilous committed Oct 23, 2016
1 parent 0551f15 commit 1e86bfd
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 39 deletions.
26 changes: 16 additions & 10 deletions README.md
Expand Up @@ -14,16 +14,18 @@ A logger.
const VertexLogger = require('vertex-logger');

const logger = new VertexLogger({
parent: 'parent',
name: 'name',
level: VertexLogger.LEVEL_INFO
parent: 'rootName',
name: 'name1',
level: 'info' // off fatal error warn info debug
});

logger.level = 'debug'; // reset level

logger.info('interpo%s st%s', 'lated', 'ring');
// if stdout is TTY:
// [ info] (parent/name) interpolated string (201ms)
// [ info] (rootName/name1) interpolated string (201ms)
// if not:
// 2016-10-21 14:11:31.471 [ info] (parent/name) interpolated string (201ms)
// 2016-10-21 14:11:31.471 [ info] (rootName/name) interpolated string (201ms)

logger.fatal(); // to stderr
logger.error(); // to stderr
Expand All @@ -32,19 +34,23 @@ logger.info(); // to stdout
logger.debug(); // to stdout

logger.error("couldn't", new Error('Why'));
// [error] (parent/name) couldn't (1231ms)
// [error] (rootName/name1) couldn't (1231ms)
// Error: Why
// at repl:1:25
// at sigintHandlersWrap (vm.js:22:35)
// at sigintHandlersWrap (vm.js:96:12)
// ...


// create new logger from existing logger (which becomes parent)
logger2 = logger.createLogger({name: 'child'});
logger2.info('message');
// [ info] (name/child) message (0ms)
// create new logger from existing logger
logger2 = logger.createLogger({name: 'name2'});

logger2.info('message');
// [ info] (rootName/name2) message (0ms)
//
// Note:
// name2 is actually at rootName/name1/name2 but the logger does not currently
// show the full path.

```

Expand Down
25 changes: 14 additions & 11 deletions lib/VertexLogger.js
Expand Up @@ -2,13 +2,17 @@ const {format} = require('util');
const dateFormat = require('date-format');
const {xterm} = require('cli-color');

const LEVELS = ['off', 'fatal', 'error', 'warn', 'info', 'debug'];
const LEVELS_COPY = ['off', 'fatal', 'error', 'warn', 'info', 'debug'];
const LEVEL_OFF = 0;
const LEVEL_FATAL = 1;
const LEVEL_ERROR = 2;
const LEVEL_WARN = 3;
const LEVEL_INFO = 4;
const LEVEL_DEBUG = 5;

const validLevels = [
LEVEL_OFF,
LEVEL_FATAL,
LEVEL_ERROR,
LEVEL_WARN,
Expand Down Expand Up @@ -48,32 +52,29 @@ class VertexLogger {
writable: true
});
Object.defineProperty(this, '_level', {
value: config.level || LEVEL_INFO,
value: null,
writable: true
});

Object.defineProperty(this, 'level', {
get: () => {
return this._level;
return LEVELS[this._level];
},
set: (level) => {
if (validLevels.indexOf(level) < 0) {
throw new Error('Not such a log level');
let levelNo = LEVELS.indexOf(level);
if (levelNo < 0) {
throw new Error('Not one of levels ' + LEVELS);
}
this._level = level;
this._level = levelNo;
},
});

if (validLevels.indexOf(this._level) < 0) {
this._level = LEVEL_INFO;
}
this.level = config.level || 'info';
}

createLogger(config = {}) {
if (validLevels.indexOf(config.level) < 0) {
config.level = this._level;
}
config.parent = this._name;
if (!config.level) config.level = this.level;
let logger = new VertexLogger(config);
logger._root = this._root;
return logger;
Expand Down Expand Up @@ -157,6 +158,8 @@ class VertexLogger {

}

VertexLogger.LEVELS = LEVELS_COPY;
VertexLogger.LEVEL_OFF = LEVEL_OFF;
VertexLogger.LEVEL_FATAL = LEVEL_FATAL;
VertexLogger.LEVEL_ERROR = LEVEL_ERROR;
VertexLogger.LEVEL_WARN = LEVEL_WARN;
Expand Down
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -3,7 +3,7 @@
"engines": {
"node": "^6.0.0"
},
"version": "1.1.0",
"version": "2.1.0",
"description": "A logger.",
"main": "index.js",
"scripts": {
Expand Down
53 changes: 36 additions & 17 deletions test/func-VertexLogger.js
Expand Up @@ -13,13 +13,14 @@ describe(filename, () => {
expect(logger._parent).to.be('parent');
expect(logger._name).to.be('name');
expect(logger._level).to.be(VertexLogger.LEVEL_INFO);
expect(logger.level).to.be('info');
done();

});

it('uses configured name and level', done => {

let logger = new VertexLogger({parent: 'a', name: 'x', level: VertexLogger.LEVEL_DEBUG});
let logger = new VertexLogger({parent: 'a', name: 'x', level: 'debug'});
expect(logger._parent).to.be('a');
expect(logger._name).to.be('x');
expect(logger._level).to.be(VertexLogger.LEVEL_DEBUG);
Expand All @@ -30,16 +31,16 @@ describe(filename, () => {
it('reassigns to level info on bad level', done => {

let log1 = new VertexLogger({level: 0});
let log2 = new VertexLogger({level: 6});
// let log2 = new VertexLogger({level: 6});
expect(log1._level).to.be(VertexLogger.LEVEL_INFO);
expect(log2._level).to.be(VertexLogger.LEVEL_INFO);
// expect(log2._level).to.be(VertexLogger.LEVEL_INFO);
done();

});

it('can create a new logger from an existing one which inherits the level and parent', done => {

let log1 = new VertexLogger({parent: 'a', name: 'one', level: VertexLogger.LEVEL_FATAL});
let log1 = new VertexLogger({parent: 'a', name: 'one', level: 'fatal'});
let log2 = log1.createLogger({name: 'two'});

expect(log1._parent).to.be('a');
Expand All @@ -49,6 +50,7 @@ describe(filename, () => {
expect(log2._parent).to.be('one');
expect(log2._name).to.be('two');
expect(log2._level).to.be(VertexLogger.LEVEL_FATAL);
expect(log2.level).to.be('fatal');
done();

});
Expand All @@ -66,17 +68,18 @@ describe(filename, () => {
it('can get the level', done => {

let log = new VertexLogger();
expect(log.level).to.equal(VertexLogger.LEVEL_INFO);
expect(log.level).to.equal('info');
done();

});

it('can set the level', done => {

let log = new VertexLogger();
expect(log.level).to.equal(VertexLogger.LEVEL_INFO);
log.level = VertexLogger.LEVEL_FATAL;
expect(log.level).to.equal(VertexLogger.LEVEL_FATAL);
expect(log.level).to.equal('info');
expect(log._level).to.equal(VertexLogger.LEVEL_INFO);
log.level = 'fatal';
expect(log.level).to.equal('fatal');
expect(log._level).to.equal(VertexLogger.LEVEL_FATAL);
done();

Expand All @@ -86,58 +89,74 @@ describe(filename, () => {

let log = new VertexLogger();
try {
log.level = 99;
log.level = 'xxx';
} catch (e) {
expect(e.message).to.equal('Not such a log level');
expect(e.message).to.equal('Not one of levels off,fatal,error,warn,info,debug');
done();
}

});

it('does not log to off', done => {

let log = new VertexLogger({level: 'off'});
log.fatal('just %d %s', 1, 'message');
log.fatal('just %d %s', 2, 'message');
log.fatal('just %d %s', 3, 'message');
log.fatal('just %d %s', 4, 'message');
log.fatal('just %d %s', 5, 'message');
log.fatal('just %d %s', 6, 'message');
log.fatal('just %d %s', 7, 'message');
log.fatal('just %d %s', 8, 'message');
log.fatal('just %d %s', 9, 'message');
done();

});


it('logs to fatal', done => {

let log = new VertexLogger({level: VertexLogger.LEVEL_FATAL});
let log = new VertexLogger({level: 'fatal'});
log.fatal('just %d %s', 1, 'message');
done();

});

it('logs to error', done => {

let log = new VertexLogger({level: VertexLogger.LEVEL_ERROR});
let log = new VertexLogger({level: 'error'});
log.error('just %d %s', 1, 'message');
done();

});

it('logs to warn', done => {

let log = new VertexLogger({level: VertexLogger.LEVEL_WARN});
let log = new VertexLogger({level: 'warn'});
log.warn('just %d %s', 1, 'message');
done();

});

it('logs to info', done => {

let log = new VertexLogger({level: VertexLogger.LEVEL_INFO});
let log = new VertexLogger({level: 'info'});
log.info('just %d %s', 1, 'message');
done();

});

it('logs to debug', done => {

let log = new VertexLogger({level: VertexLogger.LEVEL_DEBUG});
let log = new VertexLogger({level: 'debug'});
log.debug('just %d %s', 1, 'message');
done();

});

it('does not log above specified level', done => {

let log = new VertexLogger({level: VertexLogger.LEVEL_INFO});
let log = new VertexLogger({level: 'info'});
log._write = () => {
throw new Error('should not log');
};
Expand All @@ -148,7 +167,7 @@ describe(filename, () => {

it('includes the error stack if last arg is instanceof error', done => {

let log = new VertexLogger({level: VertexLogger.LEVEL_INFO});
let log = new VertexLogger({level: 'info'});
log.info('error %s', new Error('Problem no problem'));
done();

Expand Down

0 comments on commit 1e86bfd

Please sign in to comment.