{"library":"pino-http","title":"Pino HTTP Logger Middleware","description":"pino-http is a high-speed HTTP logger middleware designed for Node.js applications, leveraging the highly performant Pino logging library. It focuses on providing structured JSON logs for HTTP requests and responses with minimal overhead, making it ideal for high-throughput microservices and APIs. The package is currently at version 11.0.0 and follows a release cadence that often aligns with major updates to its underlying `pino` dependency, typically seeing several minor/patch releases throughout the year. Its primary differentiator is its exceptional performance compared to other HTTP loggers, achieved by deferring heavy log processing. It provides extensive customization options for log levels, request ID generation, and structured log data.","language":"javascript","status":"active","last_verified":"Tue Apr 21","install":{"commands":["npm install pino-http"],"cli":null},"imports":["import pinoHttp from 'pino-http';\n// or\nimport createPinoHttp from 'pino-http';","import type { PinoHttpLogger } from 'pino-http';","import type { Logger as PinoLogger } from 'pino';"],"auth":{"required":false,"env_vars":[]},"quickstart":{"code":"import http from 'node:http';\nimport pinoHttp from 'pino-http';\nimport pino from 'pino';\n\n// Create a base Pino logger (optional, pino-http can create one internally)\nconst baseLogger = pino({\n  level: process.env.NODE_ENV === 'production' ? 'info' : 'debug',\n  transport: {\n    target: 'pino-pretty',\n    options: {\n      colorize: true\n    }\n  }\n});\n\nconst loggerMiddleware = pinoHttp({\n  logger: baseLogger,\n  genReqId: function (req) {\n    // Generate a unique request ID for better traceability\n    return req.headers['x-request-id'] || Math.random().toString(36).substring(2, 15);\n  },\n  customLogLevel: function (req, res, err) {\n    if (res.statusCode >= 400 && res.statusCode < 500) return 'warn';\n    if (res.statusCode >= 500 || err) return 'error';\n    return 'info';\n  }\n});\n\nconst server = http.createServer((req, res) => {\n  loggerMiddleware(req, res);\n\n  req.log.info({ url: req.url, method: req.method }, 'Incoming request');\n\n  if (req.url === '/error') {\n    req.log.error('Simulating an error');\n    res.statusCode = 500;\n    res.end('Internal Server Error');\n    return;\n  }\n\n  res.end('Hello world!');\n});\n\nconst PORT = process.env.PORT || 3000;\nserver.listen(PORT, () => {\n  baseLogger.info(`Server listening on port ${PORT}`);\n});\n\n// To run: node --loader ts-node/esm your-file.ts (if using ts-node and ESM)\n// or: node your-file.js","lang":"typescript","description":"This quickstart demonstrates how to set up `pino-http` with a custom base logger, request ID generation, and dynamic log level based on response status. It includes a basic HTTP server, showcasing how `req.log` is injected for contextual logging and how to use `pino-pretty` for development output.","tag":null,"tag_description":null,"last_tested":null,"results":[]},"compatibility":null}