@logsnag/next v1.0.3
Installation
Using npm
npm install @logsnag/nextUsing yarn
yarn add @logsnag/nextUsing pnpm
pnpm add @logsnag/nextUsage
The usage depends on whether you are using the app directory structure or the pages directory structure.
Set your token's scope to
publicin 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
privatein 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
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago