@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 sebagaiwinston-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.
node winston-app.js. Konsol menerima 1 baris JSON untuk setiap record di level info atau lebih tinggi. Stack trace di sini dipersingkat.
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 sebagaipino-app.js. Panggil installLogBrewPinoInstrumentation() sekali, sebelum log pertama. Fungsi ini membaca setiap record Pino yang sudah selesai. Pino tetap menulis ke tujuannya sendiri.
node pino-app.js. Nama host dan stack trace di sini dipersingkat.
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.
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.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
<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.
