Log errors with Winston.
Please reach out if you're looking for a Node.js API or CLI engineer (11 years of experience). Most recently I have been Netlify Build's and Netlify Plugins' technical lead for 2.5 years. I am available for full-time remote positions.
This provides with two Winston formats:
Unlike Winston's default error format:
- The error
name
is logged - The full format logs nested errors, including
cause
and aggregateerrors
- The full format is JSON-safe
- The short format optionally logs the stack trace
- The error instance is not modified
Using the full format.
import { createLogger, format, transports } from 'winston'
import { fullFormat } from 'winston-error-format'
const logger = createLogger({
format: format.combine(fullFormat(), format.json()),
transports: [new transports.Http(httpOptions)],
})
const error = new ExampleError('Could not read file.')
error.filePath = '/...'
logger.error(error)
// Sent via HTTP:
// {
// level: 'error',
// name: 'ExampleError',
// message: 'Could not read file.',
// stack: `ExampleError: Could not read file.
// at ...`,
// filePath: '/...',
// }
Using the short format.
import { createLogger, format, transports } from 'winston'
import { shortFormat } from 'winston-error-format'
const logger = createLogger({
format: format.combine(shortFormat(), format.cli()),
transports: [new transports.Console()],
})
const error = new ExampleError('Could not read file.')
logger.error(error)
// Printed on the console:
// error: ExampleError: Could not read file.
// at ...
npm install winston-error-format
This package requires installing Winston separately.
npm install winston
This package works in Node.js >=18.18.0.
This is an ES module. It must be loaded using
an import
or import()
statement,
not require()
. If TypeScript is used, it must be configured to
output ES modules,
not CommonJS.
options
: Options
Return value: Format
Returns a logger
format
to combine with
format.json()
or
format.prettyPrint()
. This
logs all error properties, making it useful with
transports like
HTTP.
Errors should be logged using
logger.*(error)
.
options
: Options
Return value: Format
Returns a logger
format
to combine with
format.simple()
or
format.cli()
. This logs only the
error name
, message
and stack
, making it useful with
transports like the
console.
Errors should be logged using
logger.*(error)
.
Type: object | ((Error) => object)
The options object can be error-specific by passing a function returning it instead.
Type: boolean
Default: true
Whether to log the stack trace.
Type: string
Override the log level.
Type: (Error) => Error
Maps the error
before logging it.
winston
: A logger for just about everythingmodern-errors
: Handle errors in a simple, stable, consistent waymodern-errors-winston
: Log errors with Winstonerror-custom-class
: Create one error classerror-class-utils
: Utilities to properly create error classeserror-serializer
: Convert errors to/from plain objectsnormalize-exception
: Normalize exceptions/errorsis-error-instance
: Check if a value is anError
instancemerge-error-cause
: Merge an error with itscause
set-error-class
: Properly update an error's classset-error-message
: Properly update an error's messagewrap-error-message
: Properly wrap an error's messageset-error-props
: Properly update an error's propertiesset-error-stack
: Properly update an error's stackerror-cause-polyfill
: Polyfillerror.cause
handle-cli-error
: 💣 Error handler for CLI applications 💥safe-json-value
: ⛑️ JSON serialization should never faillog-process-errors
: Show some ❤ to Node.js process errorserror-http-response
: Create HTTP error responses
For any question, don't hesitate to submit an issue on GitHub.
Everyone is welcome regardless of personal background. We enforce a Code of conduct in order to promote a positive and inclusive environment.
This project was made with ❤️. The simplest way to give back is by starring and sharing it online.
If the documentation is unclear or has a typo, please click on the page's Edit
button (pencil icon) and suggest a correction.
If you would like to help us fix a bug or add a new feature, please check our guidelines. Pull requests are welcome!