Skip to content

Commit a8db74c

Browse files
authored
feat: Merge pull request #8 from pelias/support-varargs-log-events
Support varargs log events
2 parents ca50aa2 + c69cdc8 commit a8db74c

File tree

2 files changed

+50
-1
lines changed

2 files changed

+50
-1
lines changed

index.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const _ = require('lodash');
2+
const util = require('util');
23

34
module.exports = () => {
45
// initialize arrays for all levels
@@ -11,7 +12,16 @@ module.exports = () => {
1112
get: (layer) => {
1213
// add error(msg), info(msg), etc to getLayer() to form logger functionality
1314
return Object.keys(levels).reduce((acc, level) => {
14-
return _.set(acc, level, msg => levels[level].push(msg));
15+
return _.set(acc, level, function() {
16+
// add a function to $level that 'apply's to util.format
17+
levels[level].push(
18+
util.format.apply(
19+
null,
20+
// convert arguments to an array
21+
Array.prototype.slice.call(arguments)
22+
)
23+
);
24+
});
1525
}, { getLayer: () => layer } );
1626
},
1727
// return the supported logging levels

test/index.js

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,45 @@ test('all levels should initially be empty', (t) => {
3030

3131
});
3232

33+
test('varargs should be supported for logging events (util.format gets called under the hood)', t => {
34+
const rootLogger = require('../index')();
35+
const logger = rootLogger.get('layer value');
36+
37+
rootLogger.getLevels().forEach(level => {
38+
logger[level](`${level} message %d %s`, 1, 'blah', { a: 3 }, [4, 5]);
39+
40+
const actual = rootLogger.getMessages(level);
41+
42+
const expected = [
43+
`${level} message 1 blah { a: 3 } [ 4, 5 ]`,
44+
];
45+
46+
t.deepEquals(actual, expected, `all ${level} messages should have been returned`);
47+
48+
});
49+
50+
t.end();
51+
52+
});
53+
54+
test('0-parameter logging event calls should log empty strings', t => {
55+
const rootLogger = require('../index')();
56+
const logger = rootLogger.get('layer value');
57+
58+
rootLogger.getLevels().forEach(level => {
59+
// log nothing
60+
logger[level]();
61+
62+
const actual = rootLogger.getMessages(level);
63+
64+
t.deepEquals(actual, [''], 'empty string should have been logged');
65+
66+
});
67+
68+
t.end();
69+
70+
});
71+
3372
// TESTS FOR GET
3473
test('getMessages should return all messages logged at the specified level', (t) => {
3574
const rootLogger = require('../index')();

0 commit comments

Comments
 (0)