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:
Mari kita buat modul python bernamaKRITIKAL #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
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)
Untuk membuat kod jelas, kami mencipta contoh logger dengan fungsi set_logging.py
dan menggunakan
, 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. WARNING
ERROR
Kami 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)atau lebih tinggi, tetapi setiap satu pengendali hanya mengendalikan mesej yang mencapai atau melebihi tahap log yang ditentukan.console_handler = logging .StreamHandler()
, ia hanya menghantar dua pengendali dengan tahap
console_handler.setLevel(logging.WARNING)
Memandangkan tahap logger ditetapkan kepada
INFO
Berbalik 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
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")
Jalankan kod ini dan hasilnya ialah: set_logger
2023-03-04 02:26:57,619 - root - INFO - logging is awesome
3 Kelebihan menggunakan log
, , , 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 WARNING
ERROR
CRITICAL
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!