Request Logging
Satu langganan router.on() mengubah setiap request yang selesai menjadi access log terstruktur, tanpa kode logging di dalam handler.

Access Log Dasar
Dengarkan request:completed dan cetak satu baris per request:
typescript
import { Router } from '@neabyte/deserve'
const router = new Router({
routes: { directory: './routes' }
})
// Satu baris log per request selesai
router.on((event) => {
if (event.kind === 'request:completed') {
const { method, url, statusCode, durationMs } = event.metadata as {
method: string
url: string
statusCode: number
durationMs: number
}
console.log(`${method} ${url} ${statusCode} ${Math.round(durationMs)}ms`)
}
})
await router.serve(8000)Log JSON Terstruktur
Pancarkan JSON ketika pipeline log mengharapkan rekaman terstruktur:
typescript
router.on((event) => {
if (event.kind === 'request:completed') {
// Teruskan seluruh metadata sebagai JSON
console.log(JSON.stringify({
at: event.timestamp,
...event.metadata
}))
}
})Metadata sudah mencakup field selaras-OpenTelemetry seperti route, serverAddress, userAgent, dan requestSize. Lihat Referensi Event untuk daftar lengkap.
Mencatat Request Lambat
Saring berdasarkan durasi untuk memunculkan hanya lalu lintas lambat:
typescript
router.on((event) => {
// Tandai request lebih lambat dari 500ms
if (event.kind === 'request:completed') {
const { url, durationMs } = event.metadata as { url: string; durationMs: number }
if (durationMs > 500) {
console.warn(`SLOW ${url} ${Math.round(durationMs)}ms`)
}
}
})Untuk kegagalan, lihat Pelaporan Error.