Log errors with Winston.
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 everything -
modern-errors
: Handle errors in a simple, stable, consistent way -
modern-errors-winston
: Log errors with Winston -
error-custom-class
: Create one error class -
error-class-utils
: Utilities to properly create error classes -
error-serializer
: Convert errors to/from plain objects -
normalize-exception
: Normalize exceptions/errors -
is-error-instance
: Check if a value is anError
instance -
merge-error-cause
: Merge an error with itscause
-
set-error-class
: Properly update an error's class -
set-error-message
: Properly update an error's message -
wrap-error-message
: Properly wrap an error's message -
set-error-props
: Properly update an error's properties -
set-error-stack
: Properly update an error's stack -
error-cause-polyfill
: Polyfillerror.cause
-
handle-cli-error
: 💣 Error handler for CLI applications 💥 -
safe-json-value
: ⛑️ JSON serialization should never fail -
log-process-errors
: Show some ❤ to Node.js process errors -
error-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!