Log teks dan log terstruktur
Log teks ini berisi fakta yang sama dengan log terstruktur di bawahnya.message dan order_id. Pesannya sama untuk setiap pesanan, jadi Anda juga bisa menghitungnya.
Pilih format log
Gunakan JSON, dengan 1 objek di setiap baris. Gunakan nama field yang sama di semua layanan. Tabel ini mencantumkan field dasar dan nama padanannya di model data log OpenTelemetry dan di LogBrew.
Angka tingkat keparahan OpenTelemetry berkisar dari 1 sampai 24.
INFO dimulai di 9, WARN di 13, ERROR di 17, dan FATAL di 21. LogBrew menerima log OTLP secara langsung. Lihat Kirim data OpenTelemetry.
Praktik terbaik logging
Buat pesan tetap
Tulis"payment failed" dan masukkan ID pesanan ke sebuah field. Pesan yang tetap memungkinkan Anda mengelompokkan, menghitung, dan memasang alert untuk 1 jenis peristiwa.
Gunakan 1 nama untuk setiap field
Pilihorder_id atau orderId sekali, lalu gunakan di semua layanan. Untuk field umum, gunakan nama dari konvensi semantik OpenTelemetry, misalnya http.response.status_code.
Pilih level berdasarkan tindakan yang dibutuhkan
error berarti sebuah operasi gagal. warning berarti program berhasil pulih. info memastikan pekerjaan berjalan normal. Gunakan debug hanya saat Anda menelusuri kendala.
Tulis waktu dalam UTC
Gunakan RFC 3339 dengan milidetik dan offset, misalnya2026-11-07T14:21:19.773+00:00. Tanpa UTC dan milidetik, record dari zona waktu yang berbeda, atau record dalam detik yang sama, tersusun dengan urutan yang salah.
Tambahkan trace ID dan span ID
Dengan ID ini, Anda bisa membaca semua log dari 1 permintaan di seluruh layanan.Tetapkan layanan, lingkungan, dan rilis sekali saja
Konfigurasikan semuanya saat startup, bukan di setiap panggilan. Tanpa rilis, Anda tidak tahu deployment mana yang menyebabkan perubahan.Catat error sekali, di tempat Anda menanganinya
Tambahkan tipe dan pesan error. Jangan mencatat error yang sama lagi di setiap lapisan.Jauhkan secret dan data pribadi
Jangan mencatat kata sandi, token, cookie, body permintaan, atau URL lengkap dengan query string. Gunakan fitur penyamaran di logger Anda. Lihat Penyamaran log.Gunakan nama field yang tetap
Jangan memakai nilai sebagai nama field, misalnya{"ord_1001": "failed"}. Setiap nilai baru lalu menambah field baru, dan 1 filter tidak bisa menemukan semua pesanan.
Tulis JSON ke standard output di produksi
Gunakan format yang mudah dibaca hanya saat pengembangan.Structured logging di Python
Modul standarlogging tidak punya formatter JSON. Formatter ini menulis field dasar dan nilai dari extra={"fields": {...}}.
LogBrewLoggingHandler. Handler ini mengirim pesan, level, dan logger sebagai field, dan mengirim nilai primitif extra sebagai metadata. Lihat Logging Python.
Structured logging di Node.js
Secara default, Pino menulis 1 baris JSON untuk setiap record. Winston menulis JSON denganwinston.format.json(). Keduanya mempertahankan field dari panggilan dan dari child logger. Lihat Logging Node.js untuk kedua penyiapan dan untuk trace ID di log Express.
