Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Using webpack with pino for serverside builds: #2 #201

Merged
merged 4 commits into from Mar 20, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
27 changes: 27 additions & 0 deletions bin.js
@@ -0,0 +1,27 @@
#! /usr/bin/env node

'use strict'

var pretty = require('./pretty')

module.exports = pretty

if (arg('-h') || arg('--help')) {
usage().pipe(process.stdout)
} else if (arg('-v') || arg('--version')) {
console.log(require('./package.json').version)
} else {
process.stdin.pipe(pretty({
timeTransOnly: arg('-t'),
levelFirst: arg('-l')
})).pipe(process.stdout)
}

function usage () {
return require('fs')
.createReadStream(require('path').join(__dirname, 'usage.txt'))
}

function arg (s) {
return !!~process.argv.indexOf(s)
}
2 changes: 1 addition & 1 deletion package.json
Expand Up @@ -5,7 +5,7 @@
"main": "pino.js",
"browser": "./browser.js",
"bin": {
"pino": "./pretty.js"
"pino": "./bin.js"
},
"files": [
"pino.js",
Expand Down
24 changes: 0 additions & 24 deletions pretty.js
@@ -1,5 +1,3 @@
#! /usr/bin/env node

'use strict'

var split = require('split2')
Expand Down Expand Up @@ -139,25 +137,3 @@ function pretty (opts) {
}

module.exports = pretty

if (require.main === module) {
if (arg('-h') || arg('--help')) {
usage().pipe(process.stdout)
} else if (arg('-v') || arg('--version')) {
console.log(require('./package.json').version)
} else {
process.stdin.pipe(pretty({
timeTransOnly: arg('-t'),
levelFirst: arg('-l')
})).pipe(process.stdout)
}
}

function usage () {
return require('fs')
.createReadStream(require('path').join(__dirname, 'usage.txt'))
}

function arg (s) {
return !!~process.argv.indexOf(s)
}
89 changes: 45 additions & 44 deletions test/pretty.test.js
Expand Up @@ -2,6 +2,7 @@

var test = require('tap').test
var pino = require('../')
var pretty = require('../pretty')
var os = require('os')
var path = require('path')
var writeStream = require('flush-write-stream')
Expand All @@ -11,181 +12,181 @@ var hostname = os.hostname()

test('pino transform prettifies', function (t) {
t.plan(4)
var pretty = pino.pretty()
pretty.pipe(split(function (line) {
var prettier = pretty()
prettier.pipe(split(function (line) {
t.ok(line.match(/.*hello world$/), 'end of line matches')
t.ok(line.match(/(?!^)INFO.*/), 'includes level')
t.ok(line.indexOf('' + process.pid) > 0, 'includes pid')
t.ok(line.indexOf('' + hostname) > 0, 'includes hostname')
return line
}))
var instance = pino(pretty)
var instance = pino(prettier)

instance.info('hello world')
})

test('pino pretty moves level to start on flag', function (t) {
t.plan(4)
var pretty = pino.pretty({ levelFirst: true })
pretty.pipe(split(function (line) {
var prettier = pretty({ levelFirst: true })
prettier.pipe(split(function (line) {
t.ok(line.match(/.*hello world$/), 'end of line matches')
t.ok(line.match(/^INFO.*/), 'level is at start of line')
t.ok(line.indexOf('' + process.pid) > 0, 'includes pid')
t.ok(line.indexOf('' + hostname) > 0, 'includes hostname')
return line
}))
var instance = pino(pretty)
var instance = pino(prettier)

instance.info('hello world')
})

test('pino transform can just parse the dates', function (t) {
t.plan(1)
var pretty = pino.pretty({ timeTransOnly: true })
pretty.pipe(split(function (line) {
var prettier = pretty({ timeTransOnly: true })
prettier.pipe(split(function (line) {
var obj = JSON.parse(line)
t.ok(typeof obj.time === 'string', 'time is a string')
return line
}))
var instance = pino(pretty)
var instance = pino(prettier)

instance.info('hello world')
})

test('pino transform can format with a custom function', function (t) {
t.plan(1)
var pretty = pino.pretty({ formatter: function (line) {
var prettier = pretty({ formatter: function (line) {
return 'msg: ' + line.msg + ', foo: ' + line.foo
} })
pretty.pipe(split(function (line) {
prettier.pipe(split(function (line) {
t.ok(line === 'msg: hello world, foo: bar', 'line matches')
return line
}))
var instance = pino(pretty)
var instance = pino(prettier)

instance.info({foo: 'bar'}, 'hello world')
})

test('pino transform prettifies Error', function (t) {
var pretty = pino.pretty()
var prettier = pretty()
var err = new Error('hello world')
var expected = err.stack.split('\n')
expected.unshift(err.message)

t.plan(expected.length)

pretty.pipe(split(function (line) {
prettier.pipe(split(function (line) {
t.ok(line.indexOf(expected.shift()) >= 0, 'line matches')
return line
}))

var instance = pino(pretty)
var instance = pino(prettier)

instance.info(err)
})

test('pino transform preserve output if not valid JSON', function (t) {
t.plan(1)
var pretty = pino.pretty()
var prettier = pretty()
var lines = []
pretty.pipe(split(function (line) {
prettier.pipe(split(function (line) {
lines.push(line)
return line
}))

pretty.write('this is not json\nit\'s just regular output\n')
pretty.end()
prettier.write('this is not json\nit\'s just regular output\n')
prettier.end()

t.deepEqual(lines, ['this is not json', 'it\'s just regular output'], 'preserved lines')
})

test('handles missing time', function (t) {
t.plan(1)
var pretty = pino.pretty()
var prettier = pretty()
var lines = []
pretty.pipe(split(function (line) {
prettier.pipe(split(function (line) {
lines.push(line)
return line
}))

pretty.write('{"hello":"world"}')
pretty.end()
prettier.write('{"hello":"world"}')
prettier.end()

t.deepEqual(lines, ['{"hello":"world"}'], 'preserved lines')
})

test('pino transform prettifies properties', function (t) {
t.plan(1)
var pretty = pino.pretty()
var prettier = pretty()
var first = true
pretty.pipe(split(function (line) {
prettier.pipe(split(function (line) {
if (first) {
first = false
} else {
t.equal(line, ' a: "b"', 'prettifies the line')
}
return line
}))
var instance = pino(pretty)
var instance = pino(prettier)

instance.info({ a: 'b' }, 'hello world')
})

test('pino transform treats the name with care', function (t) {
t.plan(1)
var pretty = pino.pretty()
pretty.pipe(split(function (line) {
var prettier = pretty()
prettier.pipe(split(function (line) {
t.ok(line.match(/\(matteo\/.*$/), 'includes the name')
return line
}))
var instance = pino({ name: 'matteo' }, pretty)
var instance = pino({ name: 'matteo' }, prettier)

instance.info('hello world')
})

test('handles `null` input', function (t) {
t.plan(1)
var pretty = pino.pretty()
pretty.pipe(split(function (line) {
var prettier = pretty()
prettier.pipe(split(function (line) {
t.is(line, 'null')
return line
}))
pretty.write('null')
pretty.end()
prettier.write('null')
prettier.end()
})

test('handles `undefined` input', function (t) {
t.plan(1)
var pretty = pino.pretty()
pretty.pipe(split(function (line) {
var prettier = pretty()
prettier.pipe(split(function (line) {
t.is(line, 'undefined')
return line
}))
pretty.write('undefined')
pretty.end()
prettier.write('undefined')
prettier.end()
})

test('handles `true` input', function (t) {
t.plan(1)
var pretty = pino.pretty()
pretty.pipe(split(function (line) {
var prettier = pretty()
prettier.pipe(split(function (line) {
t.is(line, 'true')
return line
}))
pretty.write('true')
pretty.end()
prettier.write('true')
prettier.end()
})

test('accept customLogLevvel', function (t) {
t.plan(1)
var pretty = pino.pretty()
var prettier = pretty()

pretty.pipe(split(function (line) {
prettier.pipe(split(function (line) {
t.ok(line.indexOf('USERLVL') > 0, 'include custom level')
return line
}))

var instance = pino({level: 'testCustom', levelVal: 35}, pretty)
var instance = pino({level: 'testCustom', levelVal: 35}, prettier)

instance.testCustom('test message')
})
Expand Down