Bagaimanakah saya boleh Log Pengecualian Tidak Terkendali dalam Python Menggunakan Modul Pengelogan?

Barbara Streisand
Lepaskan: 2024-10-23 00:10:03
asal
750 orang telah melayarinya

How Can I Log Unhandled Exceptions in Python Using the Logging Module?

Melog Pengecualian Tidak Ditangkap dalam Python

Melainkan dikendalikan secara eksplisit, pengecualian Python dikeluarkan secara lalai kepada aliran ralat standard program (stderr). Walau bagaimanapun, mungkin terdapat keadaan apabila pengecualian yang tidak ditangkap adalah wajar untuk dilog menggunakan modul pengelogan sebaliknya.

Pendekatan tradisional untuk mengelog pengecualian tidak ditangkap adalah dengan menggunakan kaedah logging.exception(e) secara manual dalam blok except , seperti yang ditunjukkan di bawah:

<code class="python">try:
    raise Exception, 'Throwing a boring exception'
except Exception, e:
    logging.exception(e)</code>
Salin selepas log masuk

Walau bagaimanapun, menggunakan logging.exception(...) secara automatik untuk setiap pengecualian yang tidak ditangkap menghapuskan langkah manual.

Pelaksanaan

Pertimbangkan coretan kod berikut:

<code class="python">import sys
import logging

# Custom logger with handler for stdout
logger = logging.getLogger(__name__)
handler = logging.StreamHandler(stream=sys.stdout)
logger.addHandler(handler)

# Custom exception handler to log uncaught exceptions
def handle_exception(exc_type, exc_value, exc_traceback):
    # Ignore KeyboardInterrupt for Ctrl + C exit
    if issubclass(exc_type, KeyboardInterrupt):
        sys.__excepthook__(exc_type, exc_value, exc_traceback)
        return

    logger.error("Uncaught exception", exc_info=(exc_type, exc_value, exc_traceback))

# Assign custom exception handler
sys.excepthook = handle_exception

if __name__ == "__main__":
    raise RuntimeError("Test unhandled")</code>
Salin selepas log masuk

Skrip yang diubah suai ini mencapai beberapa tugas utama:

  • Pengelogan Tersuai: Menggunakan modul pengelogan untuk memformat dan merekodkan pengecualian yang tidak ditangkap.
  • Pengendalian Output Standard: Mengarahkan pengecualian kepada stdout menggunakan pengendali tersuai, memastikan ia dipaparkan dalam tetingkap konsol.
  • Pengendalian Pengecualian Terpilih: Mengabaikan pengecualian KeyboardInterrupt untuk mengekalkan keluar konsol yang anggun melalui Ctrl C.

Dengan mengatasi pengendali pengecualian lalai dengan handle_exception, pengecualian tidak ditangkap secara automatik dilog menggunakan logger yang dikonfigurasikan, meningkatkan keterlihatan dan memudahkan penyahpepijatan.

Atas ialah kandungan terperinci Bagaimanakah saya boleh Log Pengecualian Tidak Terkendali dalam Python Menggunakan Modul Pengelogan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!