Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk menyahpepijat kod modul pembalakan dalam Python

Bagaimana untuk menyahpepijat kod modul pembalakan dalam Python

WBOY
Lepaskan: 2023-05-10 16:31:06
ke hadapan
1151 orang telah melayarinya

1. Hierarki log

Sebelum anda bermula, perlu diperhatikan bahawa terdapat struktur hierarki dalam pembalakan, dipanggil pokok log atau hierarki pembalak. Hierarki terdiri daripada beberapa peringkat, setiap peringkat mewakili keterukan maklumat log yang berbeza. Tahap yang paling biasa ialah:

KRITIKAL #Ralat kritikal berlaku, atur cara mungkin tidak dapat terus berjalan.
RALAT #Ralat berlaku yang perlu disiasat.
AMARAN # Petunjuk bahawa sesuatu yang tidak dijangka berlaku atau menunjukkan beberapa masalah dalam masa terdekat.
INFO   #Maklumat am tentang pelaksanaan program.
DEBUG   #Maklumat terperinci untuk tujuan penyahpepijatan

Mari kita buat modul python bernama

:

import logging
logger = logging.getLogger()
def set_logger():
  logger.setLevel(logging.INFO)
  handler = logging.StreamHandler()
  handler.setLevel(logger_level)
  formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
  handler.setFormatter(formatter)
  logger.addHandler(handler)
Salin selepas log masuk

Untuk membuat kod jelas, kami mencipta contoh logger dengan fungsi set_logging.py dan menggunakan

untuk Menetapkan tahap log (

, getLogger , dsb.). Kaedah setLevel logger bertindak seperti penapis, yang menentukan sama ada mesej log perlu diproses dan dihantar kepada pengendali. Sebagai contoh, jika kita menetapkan tahap logger kepada DEBUG, maka logger tidak akan menghantar mesej dengan tahap INFO kepada pengendali kerana keterukan mereka adalah lebih rendah daripada set minimum pada tahap logger. Ia hanya menghantar mesej log dengan tahap setLevel atau lebih tinggi (iaitu INFO, DEBUG atau INFO) kepada pengendali untuk diproses. WARNINGERRORKami mencipta CRITICAL untuk menghantar maklumat log ke strim, seperti konsol atau terminal. Ia digunakan untuk mengeluarkan maklumat log untuk tujuan penyahpepijatan. Kami juga menetapkan tahap untuk pengendali.

Kami melakukan ini kerana apabila pengendali menerima mesej daripada pembalak, ia akan membandingkan mesej tersebut ke tahapnya dan menapis mesej yang kurang teruk sebelum memancarkan. Apabila kita mempunyai pengendali yang berbeza: StreamHandler

logger.setLevel(logging.INFO)

file_handler = logging.FileHandler()
file_handler.setLevel(logging.ERROR)

console_handler = logging .StreamHandler()
console_handler.setLevel(logging.WARNING)


Memandangkan tahap logger ditetapkan kepada

, ia hanya menghantar dua pengendali dengan tahap
atau lebih tinggi, tetapi setiap satu pengendali hanya mengendalikan mesej yang mencapai atau melebihi tahap log yang ditentukan.

INFOBerbalik kepada contoh utama kami, kami kemudian mencipta pemformat dan menambahkannya pada pengendali. Pemformat menentukan format mesej log, termasuk cap masa, nama logger, tahap log dan mesej. Akhir sekali, kami menambah pengendali pada pembalak". INFO

Sekarang dalam kod, kita perlu memanggil

seperti ini:

import logging
from set_logging import set_logger
set_logger()
logger = logging.getLogger()
def roman_number(s: str) -> int:
    dic = {"I": 1, "V": 5, "X": 10, "L": 50, "C": 100, "D": 500, "M": 1000}
    res = 0
    pre = None
    for char in s:
        res += dic.get(char)
        if dic.get(pre) and dic.get(pre) < dic.get(char):
            res -= 2 * dic.get(pre)
        pre = char
    logger.info("logging is awesome")
    return res
roman_number("IV")
Salin selepas log masuk

Jalankan kod ini dan hasilnya ialah: set_logger

2023-03-04 02:26:57,619 - root - INFO - logging is awesome

3 Kelebihan menggunakan log

    Level
  • Logger menyediakan cara untuk menetapkan tahap log yang berbeza untuk pelbagai jenis mesej, seperti

    , , , DEBUG dan INFO ini menjadikannya lebih mudah untuk menapis dan mengutamakan mesej log berdasarkan keterukan mereka Sudah tentu, pencetakan boleh meniru tingkah laku yang sama seperti pengelogan, tetapi ia memerlukan kerja pengekodan yang lebih keras dan tidak berfungsi seperti pengelogan WARNINGERRORCRITICAL

    Prestasi
  • Mencetak mesej log boleh menjadi lebih perlahan daripada menggunakan logger, terutamanya apabila memproses sejumlah besar data atau mengelog dengan kerap >
  • Kebolehkonfigurasian kelakuan pengelogan aplikasi, seperti peringkat log, destinasi log dan format log, tanpa mengubah suai kod sumber memudahkan untuk mengurus dan mengekalkan tingkah laku pengelogan dari semasa ke semasa

  • . Fleksibiliti Seperti konsol, fail atau pangkalan data. Fleksibiliti ini memudahkan untuk mengurus log dan menganalisisnya.

Atas ialah kandungan terperinci Bagaimana untuk menyahpepijat kod modul pembalakan dalam Python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan