Skip to content

Commit

Permalink
Merge pull request #201 from joeyvandijk/patch-1
Browse files Browse the repository at this point in the history
Using webpack with pino for serverside builds: #2
  • Loading branch information
mcollina committed Mar 20, 2017
2 parents 4b3eb2c + bb2aa9f commit 79a5671
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 69 deletions.
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

0 comments on commit 79a5671

Please sign in to comment.