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 sebagaiapp.py. Panggil logging.basicConfig() sekali, di titik masuk program. Ambil logger bernama di setiap modul.
python3 app.py. Output masuk ke standard error.
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.
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.
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. Gunakanelse 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.
- 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 levelWARNINGatau lebih tinggi beserta alasannya. - Tangkap
Exception, bukanBaseException.BaseExceptionjuga menangkapKeyboardInterruptdanSystemExit, 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-raiseExceptionGroup. 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 mewarisiException. 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
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
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
Pilih record yang dikirim ke LogBrew
Beri handler level sendiri agar lebih sedikit record yang dikirim. Konsol tetap menerimaINFO dan yang lebih tinggi.
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.
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.
Mengatasi kendala
Untuk aplikasi web, lihat logging Flask. Untuk memilih format log, lihat Structured logging. Untuk runtime lain, lihat Integrasi SDK.
