Opinionated logging utility for unified logging in distributed systems based on winston.
Install via npm
:
npm install --save @martinnirtl/logging
Or yarn
:
yarn add @martinnirtl/logging
Programmatically configure library:
import logger, { setDefaults } from '@martinnirtl/logging'
setDefaults({
level: 'warn',
metadata: { service: 'foo-service' },
prettyPrint: process.env.NODE_ENV !== 'production',
})
logger.info('hello world') // will not be printed
Or use environment variables:
# Specify log-level (default: info, options: [silly, debug, info, warn, error])
LOG_LEVEL=debug
# Add metadata tags with `LOG_METADATA_`-prefix, e.g. set { service: 'foo-service' }
LOG_METADATA_SERVICE=foo-service
# Pretty-print json-logs on truthy value (default: false)
LOG_PRETTY=true
# Silent logger on truthy value (default: false)
LOG_SILENT=0
Singleton pattern:
import logger, { setDefaults } from '@martinnirtl/logging'
setDefaults({
level: 'debug',
metadata: { 'process-id': process.pid },
})
logger.debug('just set the logger-defaults')
logger.info('starting application...', { date: new Date() })
Or dedicated loggers:
import { getLogger, setDefaults } from '@martinnirtl/logging'
setDefaults({
level: 'debug',
metadata: { service: 'foo-service' },
})
const logger = getLogger({
metadata: { context: 'initialization' },
})
logger.info('starting application...', { date: new Date() })
The lib also ships middlewares to optimally integrate into popular 3rd party frameworks.
At the moment, only the express framework is supported.
The express middleware allows to add a logger instance to every request-handler. Also it enables logging of incoming requests plus automatic request-body|headers|query|params
to logging object's metadata mapping.
const { getLogger, middleware, setDefaults } = require('@martinnirtl/logging')
const express = require('express')
setDefaults({
level: 'debug', // default 'info'
})
const logger = getLogger({
metadata: { context: 'init' },
})
const app = express()
app.use(middleware('express', {
addToRequestObject: true, // default true
logIncoming: {
level: "debug", // default 'info'
metadata: {
body: true, // add body as a whole
headers: ['host'], // add host field of headers to metadata
}
}
}))
app.all('/', (req, res) => {
req.logger.debug('it works!')
return res.status(200).send('Hello World')
})
app.listen(3000, () => logger.info(`app listening on port 3000`))