Proper logging is a critical aspect of building and maintaining functional web applications.

It can help you track errors, diagnose performance problems, and understand how users interact with your app.

Node.js has many logging packages to help you create and manage structured logs.

a person holding up a node.js sticker

Here you will explore the top logging packages currently available in the Node.js ecosystem and how to use them.

Winston

Winston is a Node.js library that provides flexible logging functionality, including multiple transports.

A transport is a storage medium for your logs.

winston github summary

Winston supports console, file, and online grid transports.

Using Winston’s logging levels, you could create custom transports and filter logs based on severity.

you could install Winston as a dependency in your project directory usingnpm, the JavaScript package manager.

Morgan.js github summary

Run this command:

The code block below demonstrates how to set up a basic logging system using Winston.

you’re able to define logs for different locations and varying levels of severity.

This code configures a logger with three transports.

Pino.js GitHub Summary

The first is a console transport, which will output log messages to the console.

The third is a file transport that will write all logs to a “combined.log” file.

Morgan

Morgan is a logging middleware for Node.js that provides basic request-logging capabilities.

Debug.js GitHub summary

It is designed to be lightweight and easy to use.

One of the key benefits of Morgan is its simplicity.

Despite its simplicity, Morgan is a powerful logging package that provides essential request-logging capabilities for Node.js applications.

Pino supports multiple transport types, easily extended with custom transports.

Debug

Debug is a logging package for Node.js modeled after Node.js core’s debugging technique.

Another advantage of Debug is its compatibility with other logging packages, such as Winston.

Ultimately, the choice of logging package will depend on your project’s specific needs and requirements.