Langsung ke konten utama
LogBrew adalah platform observabilitas untuk developer dan agen coding, dengan paket gratis yang besar dan tanpa perlu kartu kredit. Panduan ini menyiapkan logging Node.js dengan Winston dan Pino, menambahkan logger Express, dan mengirim setiap log ke LogBrew bersama trace permintaannya. Setiap contoh dijalankan di Node.js 22 dengan Winston 3.19, Pino 10.4, Express 5.3, @logbrew/sdk 0.1.40, @logbrew/node 0.1.24, dan @logbrew/express 0.1.10. Setiap blok output menunjukkan output aslinya.

Pilih Winston atau Pino

Kedua library menulis log JSON terstruktur. Tetap gunakan library yang sudah dipakai aplikasi Anda. Penyiapan LogBrew berbeda untuk masing-masing library.

Siapkan proyek LogBrew

1

Buat kunci proyek

Masuk dengan CLI. Buat proyek dan simpan kunci ingest-nya di file yang hanya bisa dibaca pemiliknya.
CLI tidak menampilkan kunci. Di produksi, gunakan secret manager dari platform Anda.
2

Instal paket

Paket ini membutuhkan Node.js 18.19 atau yang lebih baru. Instal Winston, Pino, atau keduanya.
3

Tetapkan kunci dan identitas deployment

createLogBrewNodeClient() membaca kunci dari LOGBREW_SERVER_API_KEY. Nama layanan adalah name di package.json. Tetapkan LOGBREW_SERVICE_NAME untuk memakai nama lain. Contoh-contoh ini memakai ES module, jadi tetapkan "type": "module" di package.json.

Level log Node.js

Setiap library punya nama dan angka level sendiri. LogBrew menyimpan 4 level dan mempertahankan level aslinya di metadata. Di Winston, angka yang lebih kecil berarti lebih parah. Di Pino, angka yang lebih besar berarti lebih parah. Gunakan info di produksi. Gunakan debug hanya untuk diagnosis singkat.

Logger Winston

Simpan file ini sebagai winston-app.js. Format pertama membuang record di bawah level logger sebelum transport mana pun menerimanya. Transport LogBrew menerima setiap record yang ditulis logger, jadi transport ini membutuhkan filter tersebut.
Jalankan node winston-app.js. Konsol menerima 1 baris JSON untuk setiap record di level info atau lebih tinggi. Stack trace di sini dipersingkat.
LogBrew menerima 3 record yang sama. Field-nya menjadi metadata context.*. Transport ini mengirim nama dan pesan error, tetapi tidak mengirim stack trace. Tetapkan includeErrorStack: true di createLogBrewWinstonTransport() untuk mengirim stack trace. Setiap pesan juga menjadi breadcrumb pada masalah berikutnya. Tetapkan breadcrumbs: false untuk menghentikannya.

Logger Pino

Simpan file ini sebagai pino-app.js. Panggil installLogBrewPinoInstrumentation() sekali, sebelum log pertama. Fungsi ini membaca setiap record Pino yang sudah selesai. Pino tetap menulis ke tujuannya sendiri.
Jalankan node pino-app.js. Nama host dan stack trace di sini dipersingkat.
LogBrew menerima 3 record. Pino membuang record debug sebelum LogBrew melihatnya. Field token tidak ada di LogBrew. LogBrew membuang field kredensial, cookie, body, query, URL, dan stack trace. Path redact Pino Anda tetap berlaku sebagai kontrol kedua. pid, hostname, dan time adalah default Pino, jadi LogBrew tidak menyalinnya. Perekaman otomatis membutuhkan Pino 9.11 atau yang lebih baru di versi 9.x, atau Pino 10.1 atau yang lebih baru. Untuk versi Pino yang lebih lama, gunakan createLogBrewPinoDestination() dari @logbrew/sdk sebagai tujuan Pino. Untuk membaca output Pino saat pengembangan, kirim output itu ke pino-pretty.

Logger Express

logbrewMiddleware() membuat 1 span permintaan untuk setiap permintaan. logbrewErrorHandler() melaporkan error sebagai masalah. Log Pino di dalam permintaan mendapat trace ID dan span ID dari permintaan itu. Simpan file ini sebagai express-app.js.
Jalankan aplikasi. Lalu kirim 2 permintaan dari terminal kedua.
LogBrew menerima peristiwa berikut. Log dan span dari setiap permintaan memiliki trace ID yang sama. Nama span memakai template route, bukan path konkret. Log listening on 3000 tidak punya trace karena ditulis di luar permintaan. Biarkan middleware membuat klien permintaannya sendiri. Jangan teruskan client untuk seluruh proses ke logbrewMiddleware() atau logbrewErrorHandler(). Middleware mematikan klien permintaannya setelah setiap respons.

Tambahkan trace ke log Winston

Untuk Winston, berikan trace yang aktif ke transport.
Tambahkan logbrewTransport ke daftar transports logger. Setelah itu, log Winston di dalam permintaan Express memiliki trace ID dan span ID dari permintaan tersebut.

Baca kembali log

Perintah terakhir membaca semua log dari 1 permintaan. Salin <trace_id> dari trace atau masalah. Untuk membaca dari CI atau agen coding, gunakan kunci baca proyek. Lihat Verifikasi penyiapan.

Matikan tanpa kehilangan log

Klien mengirim peristiwa dalam antrean 1 detik setelah peristiwa pertama atau saat terkumpul 50 peristiwa. Saat event loop kosong, klien mengirim peristiwa yang tersisa paling lama 2 detik. process.exit() dan sinyal sistem operasi melewati langkah itu. Panggil await client.shutdown() sebelum keluar, seperti handler SIGTERM di contoh Express.

Mengatasi kendala

Untuk memilih field log, lihat Structured logging. Untuk framework lain, lihat Integrasi SDK.