Installation
Using npm
npm install @logsnag/next
Using yarn
yarn add @logsnag/next
Using pnpm
pnpm add @logsnag/next
Usage
The usage depends on whether you are using the app directory structure or the pages directory structure.
Set your token's scope to
public
in the LogSnag dashboard
App Directory:
In the app directory, you need to import the LogSnagProvider as a head element in your root layout component:
import { LogSnagProvider } from '@logsnag/next';
export default function RootLayout({
children
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<head>
<LogSnagProvider token='<TOKEN_NAME>' project='<PROJECT_NAME>' />
{/* Other head elements */}
</head>
<body>
{/* Your layout */}
<main>{children}</main>
</body>
</html>
);
}
For setting the user id in server components, use the SetUserIdServerComponent
:
import { SetUserIdServerComponent } from '@logsnag/next';
export default function Page() {
const userId: string | null = 'user-123';
return (
<>
{/* Your page content */}
<SetUserIdServerComponent userId={userId} />
</>
);
}
Pages Directory:
In the pages directory, you can wrap your app with the LogSnagProvider, similar to how you would do in a React application:
import { LogSnagProvider } from '@logsnag/next';
export default function App({ Component, pageProps }: AppProps) {
return (
<LogSnagProvider token='<TOKEN_NAME>' project='<PROJECT_NAME>'>
{/* Your app content */}
<Component {...pageProps} />
</LogSnagProvider>
);
}
Hooks
The useLogSnag
hook can be used across your client components and provides the following methods:
-
track(options: TrackOptions)
: Track custom events. -
identify(options: IdentifyOptions)
: Identify user traits. -
setUserId(userId: string | null)
: Set the user id for the current user. If the user is not logged in, pass null. -
clearUserId()
: Clear the user id for the current user. -
setDebug(flag: boolean = true)
: Set debug mode for logging.
Usage:
import { useLogSnag } from '@logsnag/next';
export function Component() {
// Get the hooks
const { setUserId, track, identify } = useLogSnag();
// Set the user id when a user logs in
setUserId('user-123');
// Track an event
track({
channel: "payments",
event: "New Subscription",
user_id: "user-123", // optional when set using setUserId
icon: "💰",
notify: true,
tags: {
plan: "premium",
cycle: "monthly",
trial: false
}
});
// Identify user traits (e.g., name, email, plan, etc.)
identify({
user_id: "user-123", // optional when set using setUserId
properties: {
name: "John Doe",
email: "john@doe.com",
plan: "premium",
}
});
// Rest of your component
}
These hooks have the same usage as their counterparts in the @logsnag/react package.
Tracking Events
You can also track events directly from HTML elements using data attributes:
<button
data-event="Upgraded Plan"
data-user-id="user-123" // optional (optional when set using setUserId)
data-channel="billing" // optional (defaults to "events")
data-icon=":moneybag:" // optional
data-tag-plan="Pro" // optional
data-tag-period="Monthly" // optional
data-tag-price="9.99" // optional
>
Upgrade to Pro
</button>
In this example, when the button is clicked, an event named "Upgraded Plan" will be tracked with the specified tags.
Server-side Usage with Next
For server-side usage, you can use LogSnag from @logsnag/next/server
It behaves similarly to @logsnag/node
Use a different token for server-side usage and set its scope to
private
in the LogSnag dashboard.
import { LogSnag } from '@logsnag/next/server';
// Initialize LogSnag
const logsnag = new LogSnag({
token: '<TOKEN>',
project: '<PROJECT_NAME>',
});
// Use it in your server-side code
// Track an event
await logsnag.track({
channel: "payments",
event: "New Subscription",
user_id: "user-123",
icon: "💰",
notify: true,
tags: {
plan: "premium",
cycle: "monthly",
trial: false
}
});
// Identify a user
await logsnag.identify({
user_id: "user-123",
properties: {
name: "John Doe",
email: "john@doe.com",
plan: "premium",
}
});
// Track an insight
await logsnag.insight.track({
title: "User Count",
value: "100",
icon: "👨",
});
// Increment an insight value
await logsnag.insight.increment({
title: "User Count",
value: 1,
icon: "👨",
});
API Documentation
For more information about the LogSnag API, see: docs.logsnag.com
Support
If you encounter any problems or issues, please contact us at shayan@logsnag.com