Better Stack Pino transport

Start logging in 3 steps

1. Install

Install the @logtail/pino npm package:

Install @logtail/pino
npm install @logtail/pino

2. Set up

Set up the Pino logger with the Better Stack transport:

Set up Pino logger
const token = '$SOURCE_TOKEN'; 
const pino = require('pino');
const transport = pino.transport({
  target: "@logtail/pino",
  options: {
    sourceToken: token,
    options: { endpoint: 'https://$INGESTING_HOST' },
  },
});
const logger = pino(transport);


3. Start logging

Use the Pino logger as usual:

Send logs to Better Stack
logger.error("Something bad happened.");
logger.info({
    item: "Orange Soda",
    price: 100.00
}, "Log message with structured logging. ->");

You should see your logs in Better Stack β†’ Live tail.

Pino 7.0.0 or higher is required

The @logtail/pino transport supports Pino v7 and above.

Logging from serverless functions

The Pino transport sends logs from a worker thread, which serverless platforms like AWS Lambda freeze as soon as your handler returns. Its last logs may never reach Better Stack.

In serverless functions, use LogtailStream instead and flush the logs before the handler returns:

Install @logtail/pino and @logtail/node
npm install @logtail/pino @logtail/node
Log from a serverless function
const pino = require('pino');
const { Logtail } = require('@logtail/node');
const { LogtailStream } = require('@logtail/pino');

const logtail = new Logtail('$SOURCE_TOKEN', {
  endpoint: 'https://$INGESTING_HOST',
});
const logger = pino(new LogtailStream(logtail));

exports.handler = async (event) => {
  logger.info('Handling event');

  // Send all logs before the function is frozen
  await logtail.flush();
  return { statusCode: 200 };
};


LogtailStream requires @logtail/pino 0.5.12 or newer.

Need help?

Please let us know at hello@betterstack.com.
We're happy to help! πŸ™

Additional resources

Want to learn more about Pino log levels and adding contextual data to your logs?
Check out our Complete Guide to Pino Logging in Node.js.