next-axiom
                                
                                
                                
                                    next-axiom copied to clipboard
                            
                            
                            
                        The official Next.js library for Axiom.
next-axiom 
 
 
 

Send Web-Vitals and logs from Next.js to Axiom.
Get started
- Make sure you have the Axiom Vercel integration installed or export 
NEXT_PUBLIC_AXIOM_INGEST_ENDPOINT - In your Next.js project, run 
npm install --save next-axiom - Wrap your Next.js config in 
withAxiomlike this innext.config.js: 
const { withAxiom } = require('next-axiom')
module.exports = withAxiom({
  // ... your existing config
})
This will proxy the Axiom ingest call from the frontend to improve deliverability.
Reporting WebVitals
Go to pages/_app.js or pages/_app.ts and add the following line:
export { reportWebVitals } from 'next-axiom'
Note: WebVitals are only sent from production deployments.
Sending Logs
- Wrap your functions using 
withAxiom, then you can usereq.loglike this: 
// serverless function
async function handler(req, res) {
  req.log.info("hello from function")
  res.status(200).text('hi')
}
export default withAxiom(handler)
// middleware function
import { NextResponse } from 'next/server'
async function handler(req, ev) {
  req.log.info("hello from middleware")
  return NextResponse.next()
}
export default withAxiom(handler)
This will log exceptions as well as making sure logs are flushed.
- Use the logger to send logs to Axiom, you can attach other metadata to your logs by passing them as parameters:
 
log.info('hello, world!')
log.debug('debugging information', { foo: 'bar', x: 'y' })
log.warn('be careful!')
log.error('oops!')
If you have fields you want to log with all messages, you can create an intermediate logger like this:
const logger = log.with({ scope: 'user' })
logger.info('User logged in', { userId: 42 })
// { 
//   "level": "info", 
//   "_time": "2022-07-04T09:49:42Z", 
//   "message": "User logged in", 
//   "fields": {
//     "scope": "user",
//     "userId": 42,
//   }
// }
In the frontend pages you can import log directly from next-axiom
import { log } from `next-axiom`;
// pages/index.js
function home() {
    ...
    log.debug('User logged in', { userId: 42 })
    ...
}
- Deploy your site and watch data coming into your Axiom dataset.
 
Note: Logs are only sent to Axiom from production deployments.
Configuration
When env vars are not detected, Pretty printing to console is enabled by default, to disable it set the environment variable:
AXIOM_PRETTY_PRINT_ENABLED=false