Express.js
ByteHide Logger integrates seamlessly with Express.js applications through middleware and route-level logging.
Installation
npm install @bytehide/logger express
Basic Setup
const express = require('express');
const { Log } = require('@bytehide/logger');
const app = express();
// Configure logger
Log.configure({
projectToken: process.env.BYTEHIDE_PROJECT_TOKEN,
logLevel: 'info'
});
app.listen(3000, () => {
Log.info('Express server started', {
context: { port: 3000 }
});
});
Request Logging Middleware
// Log all incoming requests
app.use((req, res, next) => {
Log.info('Request received', {
context: {
method: req.method,
url: req.url,
userAgent: req.get('User-Agent'),
ip: req.ip
}
});
next();
});
Route-Level Logging
app.get('/api/users', async (req, res) => {
Log.info('Fetching users');
try {
const users = await getUsersFromDatabase();
Log.info('Users fetched successfully', {
context: { count: users.length }
});
res.json(users);
} catch (error) {
Log.error('Failed to fetch users', {
context: { endpoint: '/api/users' }
}, error);
res.status(500).json({ error: 'Internal server error' });
}
});
Error Handling Middleware
// Global error handler
app.use((error, req, res, next) => {
Log.error('Unhandled error', {
context: {
method: req.method,
url: req.url,
statusCode: res.statusCode
}
}, error);
res.status(500).json({ error: 'Internal server error' });
});
User Identification
// Middleware to identify users
app.use((req, res, next) => {
if (req.user) {
Log.identify(req.user.id, req.user.email);
}
next();
});
Best Practices
Express.js Best Practices
- Use middleware for consistent request logging
- Log both successful operations and errors
- Include relevant request context in logs
- Use global error handlers for unhandled exceptions