Production Logs
Membedakan build log dan runtime log, lalu memakai bukti yang tepat sebelum menebak penyebab masalah production.
Tujuan belajar
- Membedakan kegagalan build dari error saat app menerima request
- Membaca message error, lokasi, dan waktu sebelum menyimpulkan penyebab
- Menyusun next action yang kecil dan dapat diverifikasi
- Menghindari pencatatan secret atau data user sensitif pada log
Isi lesson
6 blok- 1.Tentukan kapan error terjadi sebelum mencari cara memperbaikinyaBelum selesaiWajib
- 2.Contoh log yang memberi context tanpa membocorkan nilai rahasiaBelum selesaiWajib
- 3.Coding practiceBelum selesaiWajib
- 4.Cek pemahamanBelum selesaiWajib
- 5.Jangan menganggap semua error production adalah bug kodeBelum selesaiWajib
- 6.RingkasanBelum selesaiWajib
Tentukan kapan error terjadi sebelum mencari cara memperbaikinya
WajibBuild log menjelaskan proses menyiapkan deployment: dependency yang dipasang, file yang dikompilasi, serta warning atau error selama build. Jika deployment gagal sebelum memiliki URL Ready, mulai dari build log. Runtime log menjelaskan apa yang terjadi ketika deployment yang sudah berjalan menerima request. Jika halaman siap dibuka tetapi route tertentu menghasilkan 500 atau data gagal dimuat, cari bukti di runtime log.
Baca log dengan urutan yang sederhana: pilih deployment dan waktu kejadian yang benar, temukan error pertama yang relevan, catat route atau operasi yang gagal, lalu hubungkan dengan perubahan terakhir. Jangan menyalin token, Authorization header, password, atau object user lengkap ke console. Log harus membantu diagnosis tanpa menjadi saluran kebocoran data. Satu log message yang aman dan terstruktur jauh lebih berguna daripada banyak console.log tanpa context.
Bagian ini memengaruhi progres lesson.
Contoh log yang memberi context tanpa membocorkan nilai rahasia
Wajibexport async function getProfileForDashboard(userId: string) {
try {
return await readProfile(userId);
} catch (error) {
console.error("dashboard profile load failed", {
route: "/dashboard",
operation: "readProfile",
hasUserId: Boolean(userId),
error: error instanceof Error ? error.message : "unknown error",
});
throw new Error("Profile belum bisa dimuat.");
}
}
// Jangan log service role key, cookie session, atau seluruh profile user.Log ini mencatat route, operasi, dan bentuk error yang diperlukan untuk mencari kejadian tanpa mencatat userId mentah atau credential. Pada app nyata, sesuaikan detail yang dicatat dengan kebutuhan dan kebijakan privasi product. Error internal tetap diterjemahkan menjadi pesan yang aman untuk UI; detail diagnosis dibaca developer di tempat yang memiliki akses ke log.
Bagian ini memengaruhi progres lesson.
Coding practice
WajibDibuka di workspace khususTriage production log case
Lengkapi incident map agar build failure dan runtime failure mengarah ke bukti serta next action yang berbeda.
Tujuan awal: Fokus di tab TSX.
Practice ini dibuka di workspace khusus. Buka practice untuk memakai editor, preview, dan cek otomatis.
Tombol selesai aktif setelah semua validasi wajib lolos.
Cek pemahaman
WajibJawab duluCek pemahaman singkat
Deployment gagal sebelum URL Ready dan log menunjukkan Module not found. Log mana yang harus diperiksa lebih dulu?
Progres lesson naik setelah jawaban benar.
Kesalahan umum
WajibJangan menganggap semua error production adalah bug kode
Satu error dapat berasal dari variable yang tidak tersedia pada scope environment, callback URL auth yang belum terdaftar, root directory yang salah, dependency berbeda, atau route yang hanya gagal dengan data production. Log membantu mengurangi tebakan, tetapi ia perlu dibaca bersama deployment status, setting project, dan perubahan terakhir. Mulai dari bukti paling dekat dengan titik gagal.
Bagian ini memengaruhi progres lesson.
Ringkasan
Wajib- Build log dipakai untuk masalah saat deployment dibangun; runtime log dipakai setelah app menerima request.
- Pilih deployment, waktu, dan route yang benar sebelum membaca log.
- Cari error pertama yang relevan dan ubah satu hipotesis kecil pada satu waktu.
- Log perlu context, tetapi tidak boleh memuat secret atau data user sensitif.
- Berikutnya, kamu akan membedakan data yang dapat dibagikan cache dari data yang harus tetap segar per user.
Bagian ini memengaruhi progres lesson.
Langkah berikutnya
Selesaikan bagian penting lesson ini
Lanjutkan blok wajib berikutnya: Tentukan kapan error terjadi sebelum mencari cara memperbaikinya.