Next.js
ByteHide Logger works in Next.js applications on both client and server sides, providing comprehensive logging for full-stack applications.
Installation
npm install @bytehide/logger next
Environment Configuration
# .env.local
BYTEHIDE_PROJECT_TOKEN=your-project-token
NEXT_PUBLIC_BYTEHIDE_TOKEN=your-project-token
Client-Side Setup
// pages/_app.js
import { Log } from '@bytehide/logger';
import { useEffect } from 'react';
function MyApp({ Component, pageProps }) {
useEffect(() => {
Log.configure({
projectToken: process.env.NEXT_PUBLIC_BYTEHIDE_TOKEN,
logLevel: 'info'
});
Log.info('Next.js client initialized');
}, []);
return <Component {...pageProps} />;
}
export default MyApp;
Server-Side Setup
// lib/logger.js
import { Log } from '@bytehide/logger';
Log.configure({
projectToken: process.env.BYTEHIDE_PROJECT_TOKEN,
logLevel: 'info',
fileOutput: {
enabled: true,
path: './logs'
}
});
export { Log };
API Routes
// pages/api/users.js
import { Log } from '../../lib/logger';
export default async function handler(req, res) {
Log.info('API request received', {
context: {
method: req.method,
url: req.url
}
});
try {
const users = await getUsers();
Log.info('Users fetched successfully', {
context: { count: users.length }
});
res.status(200).json(users);
} catch (error) {
Log.error('Failed to fetch users', {
context: { endpoint: '/api/users' }
}, error);
res.status(500).json({ error: 'Internal server error' });
}
}
Server-Side Rendering
// pages/users.js
import { Log } from '../lib/logger';
export async function getServerSideProps() {
Log.info('Server-side rendering users page');
try {
const users = await fetchUsers();
Log.info('Users data fetched for SSR', {
context: { count: users.length }
});
return { props: { users } };
} catch (error) {
Log.error('SSR failed for users page', {}, error);
return { props: { users: [] } };
}
}
Page Component Logging
// pages/profile.js
import { Log } from '@bytehide/logger';
import { useEffect } from 'react';
export default function Profile() {
useEffect(() => {
Log.info('Profile page loaded');
}, []);
const handleUpdate = async () => {
Log.info('Profile update initiated');
try {
await updateProfile();
Log.info('Profile updated successfully');
} catch (error) {
Log.error('Profile update failed', {}, error);
}
};
return <button onClick={handleUpdate}>Update Profile</button>;
}
Middleware
// middleware.js
import { Log } from '@bytehide/logger';
import { NextResponse } from 'next/server';
export function middleware(request) {
Log.info('Middleware executed', {
context: {
pathname: request.nextUrl.pathname,
userAgent: request.headers.get('user-agent')
}
});
return NextResponse.next();
}
Best Practices
Next.js Best Practices
- Use different tokens for client and server if needed
- Configure file logging for server-side only
- Log both SSR/SSG and client-side events
- Use middleware for request-level logging