Latest Socket ResearchMalicious Chrome Extension Performs Hidden Affiliate Hijacking.Details
Socket
Book a DemoInstallSign in
Socket

http-ndjson

Package Overview
Dependencies
Maintainers
1
Versions
14
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

http-ndjson

Log http requests as ndjson

Source
npmnpm
Version
2.3.3
Version published
Maintainers
1
Created
Source

http-ndjson

NPM version build status Test coverage Downloads js-standard-style

Log http requests as ndjson.

Installation

$ npm install http-ndjson

Usage

const httpNdjson = require('http-ndjson')
const http = require('http')

http.createServer((req, res) => {
  httpNdjson(req, res).pipe(process.stdout)
  res.end()
}).listen()
{ name: 'http', method: 'GET', message: 'request', url: '/' }
{ name: 'http', method: 'GET', message: 'response', url: '/', statusCode: 200, elapsed: '5ms' }

Custom loggers

Sometimes process.stdout is not quite what you're looking for. Because http-ndjson is a stream it can easily plug into any streaming logger:

bole

const boleStream = require('bole-stream')
const httpNdjson = require('http-ndjson')
const bole = require('bole')
const http = require('http')

bole.output({ level: 'info', stream: process.stdout })

http.createServer((req, res) => {
  httpNdjson(req, res).pipe(boleStream({ level: 'info' }))
  res.end()
}).listen()

bunyan

const bunyanStream = require('bunyan-stream')
const httpNdjson = require('http-ndjson')
const bunyan = require('bunyan')

const logger = bunyan.createLogger({ name: 'myApp' })

http.createServer((req, res) => {
  httpNdjson(req, res).pipe(bunyanStream({ level: 'info' }, logger))
  res.end()
}).listen()

Response size

http-ndjson can set a responseSize property on the response. It's recommended to use the size-stream package.

const httpNdjson = require('http-ndjson')
const sizeStream = require('size-stream')
const http = require('http')

http.createServer((req, res) => {
  const httpLogger = httpNdjson(req, res)
  httpLogger.pipe(process.stdout)

  const size = sizeStream()
  size.once('size', size => httpLogger.setSize(size))

  req.pipe(size).pipe(res)
}).listen()

Log custom properties

http-ndjson logs a sensible set of standard properties, but sometimes there's a need to dive in and log more. An optional third argument can be added with custom fields that will be logged on either request or response.

const httpNdjson = require('http-ndjson')
const http = require('http')

http.createServer((req, res) => {
  const opts = { req: { requestId: req.headers['requestId'] } }
  httpNdjson(req, res, opts)
  res.end()
}).listen()

Forward headers

Determining the origin of a request can be hard when using reverse-proxies. It's not too uncommon for users to mask their IP by providing an x-forwarded-for header. http-ndjson makes no assumptions about forwarding headers and logs all properties instead. The following headers are logged:

  • x-forwarded-for: standardized reverse proxy header (rfc7239)
  • x-real-ip: non-standard reverse proxy header
  • http-client-ip: non-standard reverse proxy header

API

readStream = httpNdjson(req, res, opts?)

Create an http logger. Returns a write stream. Opts can contain the following values:

  • req: an object with values that will be logged on request
  • res: an object with values that will be logged on response

readStream.setContentLength(size)

Set the content length in bytes.

See Also

License

MIT

Keywords

http

FAQs

Package last updated on 27 Oct 2015

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts