October DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsSlow PC?RecommendedPC slow today? Run a repair scan before it gets worseResolve common Windows issues and optimize system performance.Scan NowOctober DealsAmazon USDeal season is back - check today's better picksAmazon US: current deals, useful picks and tech finds.See Picks×
Skip to content
World desk6 min

Node.js Structured Logging: Pino, Winston, and Request IDs

Learn when to choose Pino or Winston for structured Node.js logs, how to attach an ID to each Express request, and how to keep logs useful and safe.
Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

For searchable Node.js logs that can be tied to one HTTP request, emit structured JSON and attach a request ID as a field on every record. In Express, pino-http provides request-scoped loggers; Pino is a natural fit when you want JSON output and child-logger context, while Winston offers configurable formats and transports for varied destination needs.

What structured logging gives you

A structured log record is data with named fields, rather than only a sentence assembled for a human to read. For example, a request event can contain a message, severity, request ID, method, and route as separate values. A log backend can then filter by a field such as requestId without trying to parse it out of prose.

As an Amazon Associate I earn from qualifying purchases.

Choose a small, deliberate schema and keep field names consistent. Put variable values in structured fields instead of interpolating them into message strings. A request ID is a correlation handle: it helps locate records for the same request, but does not establish who a user is or whether that user is authorized.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Pino vs. Winston for a Node.js application

Need Pino Winston
JSON output and field conventions Emits JSON log records. Its logger and child bindings provide structured context. Pino project documentation Configurable formats include JSON formatting; configure the format and fields to match the destination. Winston package documentation
Request-scoped context in Express pino-http middleware exposes req.log and res.log, and supports a custom request-ID function. pino-http documentation The cited package documentation establishes Winston’s general logger, formats, and transports, not a built-in Express request-ID middleware. Pass request context into your application logging design explicitly.
Destinations and transports Use Pino’s logging and processing approach with a destination appropriate to your deployment; keep processing work off the request event loop where possible. Pino project documentation Transports are a core configuration choice. Select and configure them for the destinations the project needs. Winston package documentation
Google Cloud Logging Google Cloud documents Pino integration with explicit mapping from Pino severity levels to Cloud Logging severities. Google Cloud setup documentation Google Cloud documents a Winston integration path. Destination-specific configuration still matters. Google Cloud setup documentation

Use Pino when request-scoped logging and JSON records are central to the application, especially with the pino-http middleware pattern below. Use Winston when its configurable formats and transport model better match the destinations and conventions already in use. Neither choice removes the need to define a stable schema and validate what enters it.

#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter | 4Pack Type C Female to A Male Cable Converter for Apple Duo 17 16 15 14 Plus,iWatch Watch 12 11 10,iPad 9 8 Air,Airpods 5 4
  • Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
  • Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
  • Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
  • Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
  • 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.

Express’s production guidance recommends a logging library such as Pino for application activity rather than console.log(). It also distinguishes activity logging from debugging output and cautions that console writes to terminals or files can be synchronous. That is framework guidance, not an independently verified, apples-to-apples performance result. Pino’s project makes a qualitative performance claim, but the available evidence here does not establish a dated independent benchmark comparison.

Add a request ID to Express logs with Pino

Install and configure pino-http early in the Express middleware chain, before routes that need to log. Its custom request-ID function can reuse an incoming identifier or create a UUID, and the chosen ID can be returned in an X-Request-Id response header. Reuse an upstream value only when your deployment’s trust policy permits it; otherwise generate a fresh ID. The example validates the header as a bounded, simple token before reuse.

Rank #2
Sale
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter
  • 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
  • 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
  • Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
  • 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
  • What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.
import express from 'express';
import pinoHttp from 'pino-http';
import { randomUUID } from 'node:crypto';

const app = express();

app.use(pinoHttp({
  genReqId(req, res) {
    const incoming = req.headers['x-request-id'];
    const requestId =
      typeof incoming === 'string' && /^[A-Za-z0-9._-]{1,128}$/.test(incoming)
        ? incoming
        : randomUUID();

    res.setHeader('X-Request-Id', requestId);
    return requestId;
  },
}));

app.get('/orders/:orderId', (req, res) => {
  req.log.info(
    { orderId: req.params.orderId },
    'Fetching order'
  );
  res.json({ ok: true });
});

The regular expression is an example of a narrow identifier policy, not a universal requirement. Adapt it to the format accepted by a trusted proxy or gateway. Do not reflect arbitrary unbounded client input into logs or response headers. If the application must always issue its own IDs, remove inbound reuse and generate a UUID for every request.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use the request logger in downstream code

For request-specific operations, pass the request logger into the function that performs the work, rather than reaching for a process-wide logger with no request context:

Rank #3
Sale
Anker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter
  • Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
  • Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
  • Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
  • Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
  • What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.
async function loadOrder(orderId, log) {
  log.info({ orderId }, 'Loading order data');
  // Perform the lookup and return the result.
}

app.get('/orders/:orderId', async (req, res, next) => {
  try {
    const order = await loadOrder(req.params.orderId, req.log);
    res.json(order);
  } catch (error) {
    req.log.error({ err: error }, 'Order lookup failed');
    next(error);
  }
});

Keep the logger in scope for the request and its work. An ID in a log record does not automatically travel to another service: when making an outbound request, explicitly forward the correlation value according to that service’s interface and trust rules.

Configure Winston around the destination

Winston is a general-purpose logger with configurable formats and transports. Its package documentation lists JSON formatting and an info default level. In practice, configure the formatter and transports to fit where records will go; do not assume a configuration intended for one destination will behave identically with another.

Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray
  • Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
  • Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
  • Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
  • Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
  • Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft
import winston from 'winston';

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.Console(),
  ],
});

logger.info('Order fetched', {
  requestId: 'example-request-id',
  orderId: 'order-42',
});

This illustrates JSON formatting and a console transport; it is not a universal production transport configuration. For request correlation, make requestId an explicit structured field on each relevant event or provide request-scoped logger context through your application architecture. Winston’s general logger does not by itself add an Express request ID to every event.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Route logs to production systems safely

Keep log processing from blocking requests

Express advises using a logging library for application activity and warns that console output to terminals or files can be synchronous. Pino’s project documentation recommends doing sending, alerting, reformatting, and other log processing in a separate process or thread because Node.js uses a single-threaded event loop. Treat transports and processors as part of the application’s operational design: avoid avoidable heavy work on the request path, and configure the destination according to its own integration guidance.

Best Value
Sale
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display | 85W Max PD, 1 Powered USB-C 5Gbps & 2 Powered USB-A 3.0 5Gbps Data Ports, for MacBook Pro, MacBook Air, Dell and More (Black)
  • 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
  • Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
  • Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
  • HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
  • What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.

Map severity to the backend’s conventions

Log levels and destination severities are not guaranteed to use identical names or numeric conventions. For Google Cloud Logging, follow its Node.js setup documentation; the Pino integration requires an explicit mapping of Pino severity levels to Cloud Logging severities. The same principle applies elsewhere: verify how the selected transport interprets levels rather than assuming the backend will infer the intended severity.

Protect the log schema and its contents

  • Use controlled top-level keys. Pino warns that user-controlled object keys can collide with logger or application fields. Do not pass untrusted objects directly to Pino logging methods or child bindings. If you need to retain such a value, put it under an application-controlled key and consider how its contents will be handled. Pino help and troubleshooting
  • Log only what helps operations. Avoid indiscriminately logging request bodies or externally supplied objects. Prefer a few defined fields, such as a validated request ID and a route or resource identifier, over dumping an entire request.
  • Separate correlation from identity. A request ID groups events; it is not authentication evidence, authorization, or a substitute for access controls.
  • Do not assume propagation. If a request calls another service and you want cross-service correlation, explicitly forward an agreed identifier and define how the receiver validates or replaces it.

Choose the pattern that fits

  • Choose Pino with pino-http for Express request-scoped req.log/res.log, structured JSON, and a documented request-ID hook.
  • Choose Winston when its configurable formats and transports are a better match for the application’s destination requirements; build request context into your own request handling.
  • For either library, standardize field names, select a level policy, keep expensive processing away from the request event loop, and treat external values as untrusted input.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

Leave a Reply

Your email address will not be published. Required fields are marked *

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

More from the Wire

  1. World desk4 min
    How to Spot an AI Voice Scam Before Sending MoneyDon’t rely on how a caller sounds. Pause, call back through a known number, and verify the emergency with another trusted person before sending money.
  2. Mountain View desk4 min
    Google’s SynthID Detector: How to Check AI-Generated Images, Video and AudioGoogle’s SynthID Detector looks for an embedded watermark in supported images, video and audio. Here is what its results do—and do not—show.
  3. Redmond desk20 min
    How to create a link to File or Folder in Windows 11Windows 11 gives you several ways to point to a file or folder without moving or duplicating it. You can create a desktop shortcut,…
Recommended PC Tool
Recommended PC Tool
Outdated Drivers Are Slowing You DownFree scan - exact matches
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.