Skip to content

Commit 29c6366

Browse files
initial logger
1 parent 4898fb6 commit 29c6366

File tree

5 files changed

+122
-1
lines changed

5 files changed

+122
-1
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
# oak-utils
1+
# oak-tools
22
Helpful utilities for developing oak applications

index.js

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
const { join } = require('path')
2+
3+
module.exports.logger = function (opts, cb = function () {}) {
4+
let logger = new (require(join(__dirname, 'lib', 'logger')))(opts)
5+
cb(logger)
6+
return logger
7+
}

lib/logger.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
const pino = require('pino')
2+
3+
/**
4+
* Creates a logger object
5+
* @param {string} [level='info'] - set the log level, default is info
6+
* @param {Object} [stream=process.stdout] - outbound stream, defaults to process.stdout
7+
* @param {boolean} [pretty=false] - pretty printing, defaults to false
8+
* @returns {Object} - Log level methods
9+
*/
10+
function logger ({ level = 'info', stream = process.stdout, pretty = false } = {}) {
11+
if (pretty) {
12+
let _pretty = pino.pretty()
13+
_pretty.pipe(stream)
14+
stream = _pretty
15+
}
16+
17+
let _logger = pino(stream)
18+
_logger.level = level
19+
20+
return _logger
21+
}
22+
23+
module.exports = logger

package.json

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
{
2+
"name": "oak-tools",
3+
"version": "0.1.0",
4+
"description": "Helpful utilities for developing oak applications",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "node_modules/.bin/standard && find test/*.js | xargs -n 1 node | node_modules/.bin/tap-difflet",
8+
"coverage": "node node_modules/.bin/istanbul cover node_modules/.bin/tape test/*.js || true",
9+
"coveralls": "npm run-script coverage && node node_modules/.bin/coveralls < coverage/lcov.info && rm -rf coverage/ || true"
10+
},
11+
"repository": {
12+
"type": "git",
13+
"url": "git+https://github.com/OakLabsInc/oak-tools.git"
14+
},
15+
"contributors": [
16+
"Flynn Joffray <nucleardreamer@gmail.com>",
17+
"Nir Ziv <nir@oaklabs.is>"
18+
],
19+
"keywords": [
20+
"utilities",
21+
"oak"
22+
],
23+
"license": "MIT",
24+
"bugs": {
25+
"url": "https://github.com/OakLabsInc/oak-tools/issues"
26+
},
27+
"homepage": "https://github.com/OakLabsInc/oak-tools#readme",
28+
"dependencies": {
29+
"pino": "3.0.5"
30+
},
31+
"devDependencies": {
32+
"coveralls": "2.11.14",
33+
"istanbul": "0.4.2",
34+
"standard": "8.5.0",
35+
"tap-difflet": "0.4.0",
36+
"tape": "4.6.0"
37+
}
38+
}

test/logger.test.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
process.env.NODE_ENV = 'test'
2+
3+
const { join } = require('path')
4+
const Stream = require('stream')
5+
const async = require('async')
6+
const test = require('tape')
7+
const { logger } = require(join(__dirname, '..'))
8+
9+
const levels = [
10+
'fatal',
11+
'error',
12+
'warn',
13+
'info',
14+
'debug',
15+
'trace'
16+
]
17+
18+
test('*** logger', function (t) {
19+
t.plan(10 + levels.length)
20+
t.comment('constructor')
21+
t.equal(typeof logger, 'function', 'did return construct correctly')
22+
23+
t.comment('parameters')
24+
t.equal(typeof logger(), 'object', 'did return correctly')
25+
t.equal(typeof logger({}), 'object', 'blank object parameter')
26+
27+
t.comment('level property')
28+
let levelProp = logger({
29+
level: 'info'
30+
})
31+
t.equal(typeof levelProp, 'object', 'did return correctly')
32+
t.equal(levelProp.info.name, 'LOG', 'has level info method')
33+
t.equal(levelProp.debug.name, 'noop', 'has no debug method')
34+
35+
t.comment('stream property')
36+
let streamProp = logger({
37+
stream: new Stream()
38+
})
39+
40+
t.equal(typeof streamProp, 'object', 'did return correctly')
41+
t.equal(streamProp.stream._isStdio, true, 'defaults to stdout')
42+
t.equal(streamProp.stream.writable, true, 'stream is readable')
43+
44+
t.comment('pretty property')
45+
let prettyProp = logger({ pretty: true })
46+
t.equal(typeof prettyProp, 'object', 'did return correctly')
47+
48+
async.forEach(levels, function (level, cb) {
49+
let type = logger().hasOwnProperty(level)
50+
t.equal(type, true, `Should return ${level} method`)
51+
cb()
52+
}, t.end)
53+
})

0 commit comments

Comments
 (0)