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 membahas logging Python dengan modul standar logging, 5 level log Python, penanganan error Python, dan jenis error Python yang umum. Bagian terakhir mengirim log dan crash yang sama ke LogBrew dengan logbrew-sdk 0.1.29. Setiap contoh dijalankan di Python 3.13, dan setiap blok output menunjukkan output aslinya. Untuk aplikasi Flask, gunakan logging Flask sebagai gantinya. Panduan itu menambahkan trace permintaan ke penyiapan logging yang sama.

Tulis log Python pertama Anda

Simpan file ini sebagai app.py. Panggil logging.basicConfig() sekali, di titik masuk program. Ambil logger bernama di setiap modul.
Jalankan python3 app.py. Output masuk ke standard error.
Record debug tidak muncul karena levelnya INFO. logger.exception() mencatat di level ERROR dan menambahkan traceback. Panggil fungsi ini hanya di dalam blok except. Teruskan nilai sebagai argumen, seperti "payment retry %d of %d", 2, 3. Python membangun pesan hanya saat handler menerima record. Template pesan tetap sama untuk setiap percobaan ulang, jadi Anda bisa mencarinya.

Level log Python

Logger mengirim record hanya jika level record sama dengan atau lebih tinggi dari level logger. Handler dapat menetapkan level kedua yang lebih tinggi. Root logger dimulai di level WARNING. Logger baru memiliki level NOTSET (0) dan memakai level induknya. Gunakan INFO di produksi. Gunakan DEBUG hanya saat pengembangan atau untuk diagnosis singkat.
Baris pertama menampilkan record debug untuk satu modul. Baris kedua menghilangkan noise dari sebuah library.

Logger, handler, dan formatter

  • Logger menerima panggilan. Gunakan logging.getLogger(__name__) agar nama logger mengikuti path modul.
  • Handler mengirim record ke tujuan, misalnya konsol, file, atau LogBrew.
  • Formatter mengubah record menjadi teks.
Library tidak boleh mengonfigurasi logging. Library hanya menambahkan logging.NullHandler() ke logger miliknya sendiri. Aplikasi mengonfigurasi handler dan level satu kali. Untuk konfigurasi yang besar, gunakan logging.config.dictConfig().

Penanganan error Python

Tangkap exception paling spesifik yang bisa Anda tangani. Gunakan else untuk kode yang hanya berjalan saat berhasil dan finally untuk kode yang selalu berjalan. Gunakan raise ... from error untuk mempertahankan penyebab aslinya. Simpan file ini sebagai orders.py.
Output menampilkan kedua exception dalam rantai exception.
Ikuti aturan berikut untuk setiap exception.
  • Catat exception sekali, di tempat Anda menanganinya. Jangan mencatatnya lalu me-raise ulang di setiap lapisan, karena setiap lapisan menambah record duplikat.
  • Jangan menulis except Exception: pass. Jika Anda mengabaikan error, catat error itu di level WARNING atau lebih tinggi beserta alasannya.
  • Tangkap Exception, bukan BaseException. BaseException juga menangkap KeyboardInterrupt dan SystemExit, yang sengaja menghentikan program.
  • Definisikan class exception sendiri untuk error yang harus ditangani pemanggil, seperti OrderError.

Laporkan lebih dari satu error

Python 3.11 dan yang lebih baru dapat me-raise ExceptionGroup. Gunakan saat satu pemeriksaan menemukan lebih dari satu kesalahan. Tangani setiap jenis dengan except*.

Jenis error Python yang umum

Semua error bawaan yang dapat ditangani program mewarisi Exception. Tabel ini mencantumkan error Python yang paling sering muncul dan hal pertama yang perlu diperiksa untuk masing-masing. KeyboardInterrupt dan SystemExit mewarisi BaseException, bukan Exception. Keduanya bukan error di kode Anda.

Kirim log Python ke LogBrew

LogBrewLoggingHandler adalah handler logging standar. Handler ini mengirim setiap record yang diterimanya ke LogBrew. Handler konsol tetap sama.
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 SDK

Aktifkan lingkungan virtual aplikasi. Lalu instal paketnya. Paket ini membutuhkan Python 3.10 atau yang lebih baru.
3

Tetapkan kunci dan identitas deployment

Klien menambahkan layanan, lingkungan, dan rilis ke setiap peristiwa.
4

Tambahkan handler

Simpan file ini sebagai worker.py. Panggil logging.basicConfig() sebelum Anda membuat klien. Klien menambahkan handler ke root logger, dan basicConfig() tidak melakukan apa pun jika root logger sudah punya handler.
HttpTransport() mengirim peristiwa di latar belakang, 1 detik setelah peristiwa pertama atau saat terkumpul 50 peristiwa. client.shutdown() mengirim peristiwa yang tersisa dan menutup klien.
5

Jalankan program

Output konsol tidak berubah. LogBrew menerima 1 peristiwa log untuk setiap record. Ini peristiwa pertama, tanpa konteks runtime bersama.
Nilai primitif dari extra={...} menjadi metadata. Peristiwa kedua memiliki exceptionName KeyError dan exceptionMessage 'seats'. Untuk mengirim teks traceback lengkap, buat handler dengan include_exception_text=True.
6

Baca kembali log

Hasil baca yang cocok menunjukkan bahwa LogBrew sudah menyimpan log tersebut. Untuk membaca dari CI atau agen coding, gunakan kunci baca proyek. Lihat Verifikasi penyiapan.

Pilih record yang dikirim ke LogBrew

Beri handler level sendiri agar lebih sedikit record yang dikirim. Konsol tetap menerima INFO dan yang lebih tinggi.
Level Python menjadi level LogBrew. Nama dan angka level asli tetap ada di metadata.

Laporkan crash Python sebagai masalah

install_process_error_capture(client) melaporkan exception yang tidak tertangkap di script, worker, kode startup, dan thread. Setiap crash menjadi 1 masalah yang berisi tipe exception, pesan, stack frame, dan penyebab dalam rantai exception. Python tetap mencetak traceback dan keluar seperti biasa. Simpan file ini sebagai startup.py, lalu jalankan.
LogBrew menerima masalah dengan judul FileNotFoundError, level critical, dan mekanisme python.excepthook. Frame-nya berisi nama file, baris, dan fungsi, tetapi tidak berisi path lengkap. Crash di dalam thread memiliki level error. Sebelum Python keluar, SDK menunggu pengiriman paling lama 2 detik.
Masalah ini menyertakan pesan exception. Jangan memasukkan kredensial atau data pribadi ke pesan exception atau pesan log. Lihat Penyamaran log.

Mengatasi kendala

Untuk aplikasi web, lihat logging Flask. Untuk memilih format log, lihat Structured logging. Untuk runtime lain, lihat Integrasi SDK.