mirror of
https://github.com/arthur-pbty/portfolio2023.git
synced 2026-06-20 13:50:46 +02:00
modified
This commit is contained in:
-24
@@ -1,24 +0,0 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2016-2019 Matteo Collina, David Mark Clements and the Pino contributors
|
||||
|
||||
Pino contributors listed at https://github.com/pinojs/pino#the-team and in
|
||||
the README file.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
-152
@@ -1,152 +0,0 @@
|
||||

|
||||
|
||||
# pino
|
||||
[](https://www.npmjs.com/package/pino)
|
||||
[](https://github.com/pinojs/pino/actions)
|
||||
[](https://snyk.io/test/github/pinojs/pino)
|
||||
[](https://coveralls.io/github/pinojs/pino?branch=master)
|
||||
[](https://standardjs.com/)
|
||||
[](https://definitelytyped.org)
|
||||
|
||||
[Very low overhead](#low-overhead) Node.js logger.
|
||||
|
||||
This README and linked documentation covers pino v6.x,
|
||||
you can find all related docs in: https://github.com/pinojs/pino/tree/v6.x.
|
||||
|
||||
## Documentation
|
||||
|
||||
* [Benchmarks ⇗](/docs/benchmarks.md)
|
||||
* [API ⇗](/docs/api.md)
|
||||
* [Browser API ⇗](/docs/browser.md)
|
||||
* [Redaction ⇗](/docs/redaction.md)
|
||||
* [Child Loggers ⇗](/docs/child-loggers.md)
|
||||
* [Transports ⇗](/docs/transports.md)
|
||||
* [Web Frameworks ⇗](/docs/web.md)
|
||||
* [Pretty Printing ⇗](/docs/pretty.md)
|
||||
* [Asynchronous Logging ⇗](/docs/asynchronous.md)
|
||||
* [Ecosystem ⇗](/docs/ecosystem.md)
|
||||
* [Legacy](/docs/legacy.md)
|
||||
* [Help ⇗](/docs/help.md)
|
||||
* [Long Term Support Policy ⇗](/docs/lts.md)
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
$ npm install pino@six
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
const logger = require('pino')()
|
||||
|
||||
logger.info('hello world')
|
||||
|
||||
const child = logger.child({ a: 'property' })
|
||||
child.info('hello child!')
|
||||
```
|
||||
|
||||
This produces:
|
||||
|
||||
```
|
||||
{"level":30,"time":1531171074631,"msg":"hello world","pid":657,"hostname":"Davids-MBP-3.fritz.box"}
|
||||
{"level":30,"time":1531171082399,"msg":"hello child!","pid":657,"hostname":"Davids-MBP-3.fritz.box","a":"property"}
|
||||
```
|
||||
|
||||
For using Pino with a web framework see:
|
||||
|
||||
* [Pino with Fastify](docs/web.md#fastify)
|
||||
* [Pino with Express](docs/web.md#express)
|
||||
* [Pino with Hapi](docs/web.md#hapi)
|
||||
* [Pino with Restify](docs/web.md#restify)
|
||||
* [Pino with Koa](docs/web.md#koa)
|
||||
* [Pino with Node core `http`](docs/web.md#http)
|
||||
* [Pino with Nest](docs/web.md#nest)
|
||||
|
||||
|
||||
<a name="essentials"></a>
|
||||
## Essentials
|
||||
|
||||
### Development Formatting
|
||||
|
||||
The [`pino-pretty`](https://github.com/pinojs/pino-pretty) module can be used to
|
||||
format logs during development:
|
||||
|
||||

|
||||
|
||||
### Transports & Log Processing
|
||||
|
||||
Due to Node's single-threaded event-loop, it's highly recommended that sending,
|
||||
alert triggering, reformatting and all forms of log processing
|
||||
is conducted in a separate process. In Pino parlance we call all log processors
|
||||
"transports", and recommend that the transports be run as separate
|
||||
processes, piping the stdout of the application to the stdin of the transport.
|
||||
|
||||
For more details see our [Transports⇗](docs/transports.md) document.
|
||||
|
||||
### Low overhead
|
||||
|
||||
Using minimum resources for logging is very important. Log messages
|
||||
tend to get added over time and this can lead to a throttling effect
|
||||
on applications – such as reduced requests per second.
|
||||
|
||||
In many cases, Pino is over 5x faster than alternatives.
|
||||
|
||||
See the [Benchmarks](docs/benchmarks.md) document for comparisons.
|
||||
|
||||
<a name="team"></a>
|
||||
## The Team
|
||||
|
||||
### Matteo Collina
|
||||
|
||||
<https://github.com/pinojs>
|
||||
|
||||
<https://www.npmjs.com/~matteo.collina>
|
||||
|
||||
<https://twitter.com/matteocollina>
|
||||
|
||||
### David Mark Clements
|
||||
|
||||
<https://github.com/davidmarkclements>
|
||||
|
||||
<https://www.npmjs.com/~davidmarkclements>
|
||||
|
||||
<https://twitter.com/davidmarkclem>
|
||||
|
||||
### James Sumners
|
||||
|
||||
<https://github.com/jsumners>
|
||||
|
||||
<https://www.npmjs.com/~jsumners>
|
||||
|
||||
<https://twitter.com/jsumners79>
|
||||
|
||||
### Thomas Watson Steen
|
||||
|
||||
<https://github.com/watson>
|
||||
|
||||
<https://www.npmjs.com/~watson>
|
||||
|
||||
<https://twitter.com/wa7son>
|
||||
|
||||
## Contributing
|
||||
|
||||
Pino is an **OPEN Open Source Project**. This means that:
|
||||
|
||||
> Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project.
|
||||
|
||||
See the [CONTRIBUTING.md](https://github.com/pinojs/pino/blob/master/CONTRIBUTING.md) file for more details.
|
||||
|
||||
<a name="acknowledgements"></a>
|
||||
## Acknowledgements
|
||||
|
||||
This project was kindly sponsored by [nearForm](https://nearform.com).
|
||||
|
||||
Logo and identity designed by Cosmic Fox Design: https://www.behance.net/cosmicfox.
|
||||
|
||||
## License
|
||||
|
||||
Licensed under [MIT](./LICENSE).
|
||||
|
||||
[elasticsearch]: https://www.elastic.co/products/elasticsearch
|
||||
[kibana]: https://www.elastic.co/products/kibana
|
||||
-6
@@ -1,6 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
console.error(
|
||||
'`pino` cli has been removed. Use `pino-pretty` cli instead.\n' +
|
||||
'\nSee: https://github.com/pinojs/pino-pretty'
|
||||
)
|
||||
process.exit(1)
|
||||
-358
@@ -1,358 +0,0 @@
|
||||
'use strict'
|
||||
|
||||
const format = require('quick-format-unescaped')
|
||||
|
||||
module.exports = pino
|
||||
|
||||
const _console = pfGlobalThisOrFallback().console || {}
|
||||
const stdSerializers = {
|
||||
mapHttpRequest: mock,
|
||||
mapHttpResponse: mock,
|
||||
wrapRequestSerializer: passthrough,
|
||||
wrapResponseSerializer: passthrough,
|
||||
wrapErrorSerializer: passthrough,
|
||||
req: mock,
|
||||
res: mock,
|
||||
err: asErrValue
|
||||
}
|
||||
|
||||
function shouldSerialize (serialize, serializers) {
|
||||
if (Array.isArray(serialize)) {
|
||||
const hasToFilter = serialize.filter(function (k) {
|
||||
return k !== '!stdSerializers.err'
|
||||
})
|
||||
return hasToFilter
|
||||
} else if (serialize === true) {
|
||||
return Object.keys(serializers)
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
|
||||
function pino (opts) {
|
||||
opts = opts || {}
|
||||
opts.browser = opts.browser || {}
|
||||
|
||||
const transmit = opts.browser.transmit
|
||||
if (transmit && typeof transmit.send !== 'function') { throw Error('pino: transmit option must have a send function') }
|
||||
|
||||
const proto = opts.browser.write || _console
|
||||
if (opts.browser.write) opts.browser.asObject = true
|
||||
const serializers = opts.serializers || {}
|
||||
const serialize = shouldSerialize(opts.browser.serialize, serializers)
|
||||
let stdErrSerialize = opts.browser.serialize
|
||||
|
||||
if (
|
||||
Array.isArray(opts.browser.serialize) &&
|
||||
opts.browser.serialize.indexOf('!stdSerializers.err') > -1
|
||||
) stdErrSerialize = false
|
||||
|
||||
const levels = ['error', 'fatal', 'warn', 'info', 'debug', 'trace']
|
||||
|
||||
if (typeof proto === 'function') {
|
||||
proto.error = proto.fatal = proto.warn =
|
||||
proto.info = proto.debug = proto.trace = proto
|
||||
}
|
||||
if (opts.enabled === false) opts.level = 'silent'
|
||||
const level = opts.level || 'info'
|
||||
const logger = Object.create(proto)
|
||||
if (!logger.log) logger.log = noop
|
||||
|
||||
Object.defineProperty(logger, 'levelVal', {
|
||||
get: getLevelVal
|
||||
})
|
||||
Object.defineProperty(logger, 'level', {
|
||||
get: getLevel,
|
||||
set: setLevel
|
||||
})
|
||||
|
||||
const setOpts = {
|
||||
transmit,
|
||||
serialize,
|
||||
asObject: opts.browser.asObject,
|
||||
levels,
|
||||
timestamp: getTimeFunction(opts)
|
||||
}
|
||||
logger.levels = pino.levels
|
||||
logger.level = level
|
||||
|
||||
logger.setMaxListeners = logger.getMaxListeners =
|
||||
logger.emit = logger.addListener = logger.on =
|
||||
logger.prependListener = logger.once =
|
||||
logger.prependOnceListener = logger.removeListener =
|
||||
logger.removeAllListeners = logger.listeners =
|
||||
logger.listenerCount = logger.eventNames =
|
||||
logger.write = logger.flush = noop
|
||||
logger.serializers = serializers
|
||||
logger._serialize = serialize
|
||||
logger._stdErrSerialize = stdErrSerialize
|
||||
logger.child = child
|
||||
|
||||
if (transmit) logger._logEvent = createLogEventShape()
|
||||
|
||||
function getLevelVal () {
|
||||
return this.level === 'silent'
|
||||
? Infinity
|
||||
: this.levels.values[this.level]
|
||||
}
|
||||
|
||||
function getLevel () {
|
||||
return this._level
|
||||
}
|
||||
function setLevel (level) {
|
||||
if (level !== 'silent' && !this.levels.values[level]) {
|
||||
throw Error('unknown level ' + level)
|
||||
}
|
||||
this._level = level
|
||||
|
||||
set(setOpts, logger, 'error', 'log') // <-- must stay first
|
||||
set(setOpts, logger, 'fatal', 'error')
|
||||
set(setOpts, logger, 'warn', 'error')
|
||||
set(setOpts, logger, 'info', 'log')
|
||||
set(setOpts, logger, 'debug', 'log')
|
||||
set(setOpts, logger, 'trace', 'log')
|
||||
}
|
||||
|
||||
function child (bindings, childOptions) {
|
||||
if (!bindings) {
|
||||
throw new Error('missing bindings for child Pino')
|
||||
}
|
||||
childOptions = childOptions || {}
|
||||
if (serialize && bindings.serializers) {
|
||||
childOptions.serializers = bindings.serializers
|
||||
}
|
||||
const childOptionsSerializers = childOptions.serializers
|
||||
if (serialize && childOptionsSerializers) {
|
||||
var childSerializers = Object.assign({}, serializers, childOptionsSerializers)
|
||||
var childSerialize = opts.browser.serialize === true
|
||||
? Object.keys(childSerializers)
|
||||
: serialize
|
||||
delete bindings.serializers
|
||||
applySerializers([bindings], childSerialize, childSerializers, this._stdErrSerialize)
|
||||
}
|
||||
function Child (parent) {
|
||||
this._childLevel = (parent._childLevel | 0) + 1
|
||||
this.error = bind(parent, bindings, 'error')
|
||||
this.fatal = bind(parent, bindings, 'fatal')
|
||||
this.warn = bind(parent, bindings, 'warn')
|
||||
this.info = bind(parent, bindings, 'info')
|
||||
this.debug = bind(parent, bindings, 'debug')
|
||||
this.trace = bind(parent, bindings, 'trace')
|
||||
if (childSerializers) {
|
||||
this.serializers = childSerializers
|
||||
this._serialize = childSerialize
|
||||
}
|
||||
if (transmit) {
|
||||
this._logEvent = createLogEventShape(
|
||||
[].concat(parent._logEvent.bindings, bindings)
|
||||
)
|
||||
}
|
||||
}
|
||||
Child.prototype = this
|
||||
return new Child(this)
|
||||
}
|
||||
return logger
|
||||
}
|
||||
|
||||
pino.levels = {
|
||||
values: {
|
||||
fatal: 60,
|
||||
error: 50,
|
||||
warn: 40,
|
||||
info: 30,
|
||||
debug: 20,
|
||||
trace: 10
|
||||
},
|
||||
labels: {
|
||||
10: 'trace',
|
||||
20: 'debug',
|
||||
30: 'info',
|
||||
40: 'warn',
|
||||
50: 'error',
|
||||
60: 'fatal'
|
||||
}
|
||||
}
|
||||
|
||||
pino.stdSerializers = stdSerializers
|
||||
pino.stdTimeFunctions = Object.assign({}, { nullTime, epochTime, unixTime, isoTime })
|
||||
|
||||
function set (opts, logger, level, fallback) {
|
||||
const proto = Object.getPrototypeOf(logger)
|
||||
logger[level] = logger.levelVal > logger.levels.values[level]
|
||||
? noop
|
||||
: (proto[level] ? proto[level] : (_console[level] || _console[fallback] || noop))
|
||||
|
||||
wrap(opts, logger, level)
|
||||
}
|
||||
|
||||
function wrap (opts, logger, level) {
|
||||
if (!opts.transmit && logger[level] === noop) return
|
||||
|
||||
logger[level] = (function (write) {
|
||||
return function LOG () {
|
||||
const ts = opts.timestamp()
|
||||
const args = new Array(arguments.length)
|
||||
const proto = (Object.getPrototypeOf && Object.getPrototypeOf(this) === _console) ? _console : this
|
||||
for (var i = 0; i < args.length; i++) args[i] = arguments[i]
|
||||
|
||||
if (opts.serialize && !opts.asObject) {
|
||||
applySerializers(args, this._serialize, this.serializers, this._stdErrSerialize)
|
||||
}
|
||||
if (opts.asObject) write.call(proto, asObject(this, level, args, ts))
|
||||
else write.apply(proto, args)
|
||||
|
||||
if (opts.transmit) {
|
||||
const transmitLevel = opts.transmit.level || logger.level
|
||||
const transmitValue = pino.levels.values[transmitLevel]
|
||||
const methodValue = pino.levels.values[level]
|
||||
if (methodValue < transmitValue) return
|
||||
transmit(this, {
|
||||
ts,
|
||||
methodLevel: level,
|
||||
methodValue,
|
||||
transmitLevel,
|
||||
transmitValue: pino.levels.values[opts.transmit.level || logger.level],
|
||||
send: opts.transmit.send,
|
||||
val: logger.levelVal
|
||||
}, args)
|
||||
}
|
||||
}
|
||||
})(logger[level])
|
||||
}
|
||||
|
||||
function asObject (logger, level, args, ts) {
|
||||
if (logger._serialize) applySerializers(args, logger._serialize, logger.serializers, logger._stdErrSerialize)
|
||||
const argsCloned = args.slice()
|
||||
let msg = argsCloned[0]
|
||||
const o = {}
|
||||
if (ts) {
|
||||
o.time = ts
|
||||
}
|
||||
o.level = pino.levels.values[level]
|
||||
let lvl = (logger._childLevel | 0) + 1
|
||||
if (lvl < 1) lvl = 1
|
||||
// deliberate, catching objects, arrays
|
||||
if (msg !== null && typeof msg === 'object') {
|
||||
while (lvl-- && typeof argsCloned[0] === 'object') {
|
||||
Object.assign(o, argsCloned.shift())
|
||||
}
|
||||
msg = argsCloned.length ? format(argsCloned.shift(), argsCloned) : undefined
|
||||
} else if (typeof msg === 'string') msg = format(argsCloned.shift(), argsCloned)
|
||||
if (msg !== undefined) o.msg = msg
|
||||
return o
|
||||
}
|
||||
|
||||
function applySerializers (args, serialize, serializers, stdErrSerialize) {
|
||||
for (const i in args) {
|
||||
if (stdErrSerialize && args[i] instanceof Error) {
|
||||
args[i] = pino.stdSerializers.err(args[i])
|
||||
} else if (typeof args[i] === 'object' && !Array.isArray(args[i])) {
|
||||
for (const k in args[i]) {
|
||||
if (serialize && serialize.indexOf(k) > -1 && k in serializers) {
|
||||
args[i][k] = serializers[k](args[i][k])
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function bind (parent, bindings, level) {
|
||||
return function () {
|
||||
const args = new Array(1 + arguments.length)
|
||||
args[0] = bindings
|
||||
for (var i = 1; i < args.length; i++) {
|
||||
args[i] = arguments[i - 1]
|
||||
}
|
||||
return parent[level].apply(this, args)
|
||||
}
|
||||
}
|
||||
|
||||
function transmit (logger, opts, args) {
|
||||
const send = opts.send
|
||||
const ts = opts.ts
|
||||
const methodLevel = opts.methodLevel
|
||||
const methodValue = opts.methodValue
|
||||
const val = opts.val
|
||||
const bindings = logger._logEvent.bindings
|
||||
|
||||
applySerializers(
|
||||
args,
|
||||
logger._serialize || Object.keys(logger.serializers),
|
||||
logger.serializers,
|
||||
logger._stdErrSerialize === undefined ? true : logger._stdErrSerialize
|
||||
)
|
||||
logger._logEvent.ts = ts
|
||||
logger._logEvent.messages = args.filter(function (arg) {
|
||||
// bindings can only be objects, so reference equality check via indexOf is fine
|
||||
return bindings.indexOf(arg) === -1
|
||||
})
|
||||
|
||||
logger._logEvent.level.label = methodLevel
|
||||
logger._logEvent.level.value = methodValue
|
||||
|
||||
send(methodLevel, logger._logEvent, val)
|
||||
|
||||
logger._logEvent = createLogEventShape(bindings)
|
||||
}
|
||||
|
||||
function createLogEventShape (bindings) {
|
||||
return {
|
||||
ts: 0,
|
||||
messages: [],
|
||||
bindings: bindings || [],
|
||||
level: { label: '', value: 0 }
|
||||
}
|
||||
}
|
||||
|
||||
function asErrValue (err) {
|
||||
const obj = {
|
||||
type: err.constructor.name,
|
||||
msg: err.message,
|
||||
stack: err.stack
|
||||
}
|
||||
for (const key in err) {
|
||||
if (obj[key] === undefined) {
|
||||
obj[key] = err[key]
|
||||
}
|
||||
}
|
||||
return obj
|
||||
}
|
||||
|
||||
function getTimeFunction (opts) {
|
||||
if (typeof opts.timestamp === 'function') {
|
||||
return opts.timestamp
|
||||
}
|
||||
if (opts.timestamp === false) {
|
||||
return nullTime
|
||||
}
|
||||
return epochTime
|
||||
}
|
||||
|
||||
function mock () { return {} }
|
||||
function passthrough (a) { return a }
|
||||
function noop () {}
|
||||
|
||||
function nullTime () { return false }
|
||||
function epochTime () { return Date.now() }
|
||||
function unixTime () { return Math.round(Date.now() / 1000.0) }
|
||||
function isoTime () { return new Date(Date.now()).toISOString() } // using Date.now() for testability
|
||||
|
||||
/* eslint-disable */
|
||||
/* istanbul ignore next */
|
||||
function pfGlobalThisOrFallback () {
|
||||
function defd (o) { return typeof o !== 'undefined' && o }
|
||||
try {
|
||||
if (typeof globalThis !== 'undefined') return globalThis
|
||||
Object.defineProperty(Object.prototype, 'globalThis', {
|
||||
get: function () {
|
||||
delete Object.prototype.globalThis
|
||||
return (this.globalThis = this)
|
||||
},
|
||||
configurable: true
|
||||
})
|
||||
return globalThis
|
||||
} catch (e) {
|
||||
return defd(self) || defd(window) || defd(this) || {}
|
||||
}
|
||||
}
|
||||
/* eslint-enable */
|
||||
-36
@@ -1,36 +0,0 @@
|
||||
'use strict'
|
||||
|
||||
const pino = require('./')()
|
||||
|
||||
pino.info('hello world')
|
||||
pino.error('this is at error level')
|
||||
pino.info('the answer is %d', 42)
|
||||
pino.info({ obj: 42 }, 'hello world')
|
||||
pino.info({ obj: 42, b: 2 }, 'hello world')
|
||||
pino.info({ nested: { obj: 42 } }, 'nested')
|
||||
setImmediate(() => {
|
||||
pino.info('after setImmediate')
|
||||
})
|
||||
pino.error(new Error('an error'))
|
||||
|
||||
const child = pino.child({ a: 'property' })
|
||||
child.info('hello child!')
|
||||
|
||||
const childsChild = child.child({ another: 'property' })
|
||||
childsChild.info('hello baby..')
|
||||
|
||||
pino.debug('this should be mute')
|
||||
|
||||
pino.level = 'trace'
|
||||
|
||||
pino.debug('this is a debug statement')
|
||||
|
||||
pino.child({ another: 'property' }).debug('this is a debug statement via child')
|
||||
pino.trace('this is a trace statement')
|
||||
|
||||
pino.debug('this is a "debug" statement with "')
|
||||
|
||||
pino.info(new Error('kaboom'))
|
||||
pino.info(null)
|
||||
|
||||
pino.info(new Error('kaboom'), 'with', 'a', 'message')
|
||||
-101
@@ -1,101 +0,0 @@
|
||||
{
|
||||
"name": "pino",
|
||||
"version": "6.14.0",
|
||||
"description": "super fast, all natural json logger",
|
||||
"main": "pino.js",
|
||||
"browser": "./browser.js",
|
||||
"files": [
|
||||
"pino.js",
|
||||
"bin.js",
|
||||
"browser.js",
|
||||
"pretty.js",
|
||||
"usage.txt",
|
||||
"test",
|
||||
"docs",
|
||||
"example.js",
|
||||
"lib"
|
||||
],
|
||||
"scripts": {
|
||||
"docs": "docsify serve",
|
||||
"browser-test": "airtap --local 8080 test/browser*test.js",
|
||||
"lint": "eslint .",
|
||||
"test": "npm run lint && tap --100 test/*test.js test/*/*test.js",
|
||||
"test-ci": "npm run lint && tap test/*test.js test/*/*test.js --coverage-report=lcovonly",
|
||||
"cov-ui": "tap --coverage-report=html test/*test.js test/*/*test.js",
|
||||
"bench": "node benchmarks/utils/runbench all",
|
||||
"bench-basic": "node benchmarks/utils/runbench basic",
|
||||
"bench-object": "node benchmarks/utils/runbench object",
|
||||
"bench-deep-object": "node benchmarks/utils/runbench deep-object",
|
||||
"bench-multi-arg": "node benchmarks/utils/runbench multi-arg",
|
||||
"bench-longs-tring": "node benchmarks/utils/runbench long-string",
|
||||
"bench-child": "node benchmarks/utils/runbench child",
|
||||
"bench-child-child": "node benchmarks/utils/runbench child-child",
|
||||
"bench-child-creation": "node benchmarks/utils/runbench child-creation",
|
||||
"bench-formatters": "node benchmarks/utils/runbench formatters",
|
||||
"update-bench-doc": "node benchmarks/utils/generate-benchmark-doc > docs/benchmarks.md"
|
||||
},
|
||||
"bin": {
|
||||
"pino": "./bin.js"
|
||||
},
|
||||
"precommit": "test",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/pinojs/pino.git"
|
||||
},
|
||||
"keywords": [
|
||||
"fast",
|
||||
"logger",
|
||||
"stream",
|
||||
"json"
|
||||
],
|
||||
"author": "Matteo Collina <hello@matteocollina.com>",
|
||||
"contributors": [
|
||||
"David Mark Clements <huperekchuno@googlemail.com>",
|
||||
"James Sumners <james.sumners@gmail.com>",
|
||||
"Thomas Watson Steen <w@tson.dk> (https://twitter.com/wa7son)"
|
||||
],
|
||||
"license": "MIT",
|
||||
"bugs": {
|
||||
"url": "https://github.com/pinojs/pino/issues"
|
||||
},
|
||||
"homepage": "http://getpino.io",
|
||||
"devDependencies": {
|
||||
"airtap": "4.0.3",
|
||||
"benchmark": "^2.1.4",
|
||||
"bole": "^4.0.0",
|
||||
"bunyan": "^1.8.14",
|
||||
"docsify-cli": "^4.4.1",
|
||||
"eslint": "^7.17.0",
|
||||
"eslint-config-standard": "^16.0.2",
|
||||
"eslint-plugin-import": "^2.22.1",
|
||||
"eslint-plugin-node": "^11.1.0",
|
||||
"eslint-plugin-promise": "^5.1.0",
|
||||
"execa": "^5.0.0",
|
||||
"fastbench": "^1.0.1",
|
||||
"flush-write-stream": "^2.0.0",
|
||||
"import-fresh": "^3.2.1",
|
||||
"log": "^6.0.0",
|
||||
"loglevel": "^1.6.7",
|
||||
"pino-pretty": "^5.0.0",
|
||||
"pre-commit": "^1.2.2",
|
||||
"proxyquire": "^2.1.3",
|
||||
"pump": "^3.0.0",
|
||||
"semver": "^7.0.0",
|
||||
"split2": "^3.1.1",
|
||||
"steed": "^1.1.3",
|
||||
"strip-ansi": "^6.0.0",
|
||||
"tap": "^15.0.1",
|
||||
"tape": "^5.0.0",
|
||||
"through2": "^4.0.0",
|
||||
"winston": "^3.3.3"
|
||||
},
|
||||
"dependencies": {
|
||||
"fast-redact": "^3.0.0",
|
||||
"fast-safe-stringify": "^2.0.8",
|
||||
"process-warning": "^1.0.0",
|
||||
"flatstr": "^1.0.12",
|
||||
"pino-std-serializers": "^3.1.0",
|
||||
"quick-format-unescaped": "^4.0.3",
|
||||
"sonic-boom": "^1.0.2"
|
||||
}
|
||||
}
|
||||
-238
@@ -1,238 +0,0 @@
|
||||
'use strict'
|
||||
/* eslint no-prototype-builtins: 0 */
|
||||
const os = require('os')
|
||||
const stdSerializers = require('pino-std-serializers')
|
||||
const redaction = require('./lib/redaction')
|
||||
const time = require('./lib/time')
|
||||
const proto = require('./lib/proto')
|
||||
const symbols = require('./lib/symbols')
|
||||
const { assertDefaultLevelFound, mappings, genLsCache } = require('./lib/levels')
|
||||
const {
|
||||
createArgsNormalizer,
|
||||
asChindings,
|
||||
final,
|
||||
stringify,
|
||||
buildSafeSonicBoom,
|
||||
buildFormatters,
|
||||
noop
|
||||
} = require('./lib/tools')
|
||||
const { version } = require('./lib/meta')
|
||||
const { mixinMergeStrategySym } = require('./lib/symbols')
|
||||
const {
|
||||
chindingsSym,
|
||||
redactFmtSym,
|
||||
serializersSym,
|
||||
timeSym,
|
||||
timeSliceIndexSym,
|
||||
streamSym,
|
||||
stringifySym,
|
||||
stringifiersSym,
|
||||
setLevelSym,
|
||||
endSym,
|
||||
formatOptsSym,
|
||||
messageKeySym,
|
||||
nestedKeySym,
|
||||
mixinSym,
|
||||
useOnlyCustomLevelsSym,
|
||||
formattersSym,
|
||||
hooksSym
|
||||
} = symbols
|
||||
const { epochTime, nullTime } = time
|
||||
const { pid } = process
|
||||
const hostname = os.hostname()
|
||||
const defaultErrorSerializer = stdSerializers.err
|
||||
const defaultOptions = {
|
||||
level: 'info',
|
||||
messageKey: 'msg',
|
||||
nestedKey: null,
|
||||
enabled: true,
|
||||
prettyPrint: false,
|
||||
base: { pid, hostname },
|
||||
serializers: Object.assign(Object.create(null), {
|
||||
err: defaultErrorSerializer
|
||||
}),
|
||||
formatters: Object.assign(Object.create(null), {
|
||||
bindings (bindings) {
|
||||
return bindings
|
||||
},
|
||||
level (label, number) {
|
||||
return { level: number }
|
||||
}
|
||||
}),
|
||||
hooks: {
|
||||
logMethod: undefined
|
||||
},
|
||||
timestamp: epochTime,
|
||||
name: undefined,
|
||||
redact: null,
|
||||
customLevels: null,
|
||||
levelKey: undefined,
|
||||
useOnlyCustomLevels: false
|
||||
}
|
||||
|
||||
const normalize = createArgsNormalizer(defaultOptions)
|
||||
|
||||
const serializers = Object.assign(Object.create(null), stdSerializers)
|
||||
|
||||
function pino (...args) {
|
||||
const instance = {}
|
||||
const { opts, stream } = normalize(instance, ...args)
|
||||
const {
|
||||
redact,
|
||||
crlf,
|
||||
serializers,
|
||||
timestamp,
|
||||
messageKey,
|
||||
nestedKey,
|
||||
base,
|
||||
name,
|
||||
level,
|
||||
customLevels,
|
||||
useLevelLabels,
|
||||
changeLevelName,
|
||||
levelKey,
|
||||
mixin,
|
||||
mixinMergeStrategy,
|
||||
useOnlyCustomLevels,
|
||||
formatters,
|
||||
hooks
|
||||
} = opts
|
||||
|
||||
const allFormatters = buildFormatters(
|
||||
formatters.level,
|
||||
formatters.bindings,
|
||||
formatters.log
|
||||
)
|
||||
|
||||
if (useLevelLabels && !(changeLevelName || levelKey)) {
|
||||
process.emitWarning('useLevelLabels is deprecated, use the formatters.level option instead', 'Warning', 'PINODEP001')
|
||||
allFormatters.level = labelsFormatter
|
||||
} else if ((changeLevelName || levelKey) && !useLevelLabels) {
|
||||
process.emitWarning('changeLevelName and levelKey are deprecated, use the formatters.level option instead', 'Warning', 'PINODEP002')
|
||||
allFormatters.level = levelNameFormatter(changeLevelName || levelKey)
|
||||
} else if ((changeLevelName || levelKey) && useLevelLabels) {
|
||||
process.emitWarning('useLevelLabels is deprecated, use the formatters.level option instead', 'Warning', 'PINODEP001')
|
||||
process.emitWarning('changeLevelName and levelKey are deprecated, use the formatters.level option instead', 'Warning', 'PINODEP002')
|
||||
allFormatters.level = levelNameLabelFormatter(changeLevelName || levelKey)
|
||||
}
|
||||
|
||||
if (serializers[Symbol.for('pino.*')]) {
|
||||
process.emitWarning('The pino.* serializer is deprecated, use the formatters.log options instead', 'Warning', 'PINODEP003')
|
||||
allFormatters.log = serializers[Symbol.for('pino.*')]
|
||||
}
|
||||
|
||||
if (!allFormatters.bindings) {
|
||||
allFormatters.bindings = defaultOptions.formatters.bindings
|
||||
}
|
||||
if (!allFormatters.level) {
|
||||
allFormatters.level = defaultOptions.formatters.level
|
||||
}
|
||||
|
||||
const stringifiers = redact ? redaction(redact, stringify) : {}
|
||||
const formatOpts = redact
|
||||
? { stringify: stringifiers[redactFmtSym] }
|
||||
: { stringify }
|
||||
const end = '}' + (crlf ? '\r\n' : '\n')
|
||||
const coreChindings = asChindings.bind(null, {
|
||||
[chindingsSym]: '',
|
||||
[serializersSym]: serializers,
|
||||
[stringifiersSym]: stringifiers,
|
||||
[stringifySym]: stringify,
|
||||
[formattersSym]: allFormatters
|
||||
})
|
||||
|
||||
let chindings = ''
|
||||
if (base !== null) {
|
||||
if (name === undefined) {
|
||||
chindings = coreChindings(base)
|
||||
} else {
|
||||
chindings = coreChindings(Object.assign({}, base, { name }))
|
||||
}
|
||||
}
|
||||
|
||||
const time = (timestamp instanceof Function)
|
||||
? timestamp
|
||||
: (timestamp ? epochTime : nullTime)
|
||||
const timeSliceIndex = time().indexOf(':') + 1
|
||||
|
||||
if (useOnlyCustomLevels && !customLevels) throw Error('customLevels is required if useOnlyCustomLevels is set true')
|
||||
if (mixin && typeof mixin !== 'function') throw Error(`Unknown mixin type "${typeof mixin}" - expected "function"`)
|
||||
|
||||
assertDefaultLevelFound(level, customLevels, useOnlyCustomLevels)
|
||||
const levels = mappings(customLevels, useOnlyCustomLevels)
|
||||
|
||||
Object.assign(instance, {
|
||||
levels,
|
||||
[useOnlyCustomLevelsSym]: useOnlyCustomLevels,
|
||||
[streamSym]: stream,
|
||||
[timeSym]: time,
|
||||
[timeSliceIndexSym]: timeSliceIndex,
|
||||
[stringifySym]: stringify,
|
||||
[stringifiersSym]: stringifiers,
|
||||
[endSym]: end,
|
||||
[formatOptsSym]: formatOpts,
|
||||
[messageKeySym]: messageKey,
|
||||
[nestedKeySym]: nestedKey,
|
||||
[serializersSym]: serializers,
|
||||
[mixinSym]: mixin,
|
||||
[mixinMergeStrategySym]: mixinMergeStrategy,
|
||||
[chindingsSym]: chindings,
|
||||
[formattersSym]: allFormatters,
|
||||
[hooksSym]: hooks,
|
||||
silent: noop
|
||||
})
|
||||
|
||||
Object.setPrototypeOf(instance, proto())
|
||||
|
||||
genLsCache(instance)
|
||||
|
||||
instance[setLevelSym](level)
|
||||
|
||||
return instance
|
||||
}
|
||||
|
||||
function labelsFormatter (label, number) {
|
||||
return { level: label }
|
||||
}
|
||||
|
||||
function levelNameFormatter (name) {
|
||||
return function (label, number) {
|
||||
return { [name]: number }
|
||||
}
|
||||
}
|
||||
|
||||
function levelNameLabelFormatter (name) {
|
||||
return function (label, number) {
|
||||
return { [name]: label }
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = pino
|
||||
|
||||
module.exports.extreme = (dest = process.stdout.fd) => {
|
||||
process.emitWarning(
|
||||
'The pino.extreme() option is deprecated and will be removed in v7. Use pino.destination({ sync: false }) instead.',
|
||||
{ code: 'extreme_deprecation' }
|
||||
)
|
||||
return buildSafeSonicBoom({ dest, minLength: 4096, sync: false })
|
||||
}
|
||||
|
||||
module.exports.destination = (dest = process.stdout.fd) => {
|
||||
if (typeof dest === 'object') {
|
||||
dest.dest = dest.dest || process.stdout.fd
|
||||
return buildSafeSonicBoom(dest)
|
||||
} else {
|
||||
return buildSafeSonicBoom({ dest, minLength: 0, sync: true })
|
||||
}
|
||||
}
|
||||
|
||||
module.exports.final = final
|
||||
module.exports.levels = mappings()
|
||||
module.exports.stdSerializers = serializers
|
||||
module.exports.stdTimeFunctions = Object.assign({}, time)
|
||||
module.exports.symbols = symbols
|
||||
module.exports.version = version
|
||||
|
||||
// Enables default and name export with TypeScript and Babel
|
||||
module.exports.default = pino
|
||||
module.exports.pino = pino
|
||||
Reference in New Issue
Block a user