Rumah >pembangunan bahagian belakang >Tutorial Python >Pengelogan Python menggunakan satu fail (nama fungsi, nama fail, nombor baris)
Saya cuba memahami cara apl itu berfungsi. Untuk melakukan ini, saya memasukkan arahan nyahpepijat sebagai baris pertama dalam badan setiap fungsi, dengan matlamat untuk mengelog nama fungsi dan nombor baris (dalam kod) yang menghantar mesej ke output log. Akhir sekali, memandangkan aplikasi ini terdiri daripada banyak fail, saya ingin mencipta fail log supaya saya lebih memahami aliran kawalan aplikasi.
Ini yang saya tahu:
Untuk mendapatkan nama fungsi, saya boleh melakukannya dalam C menggunakan makro function_name.__name__
但我不想使用 function_name (这样我就可以快速复制并粘贴通用的 Log.info("Message")
到正文中所有功能)。我知道这可以使用 __func__
, tetapi saya tidak pasti tentang python.
Untuk mendapatkan nama fail dan nombor baris, saya telah melihat (dan saya percaya) aplikasi saya menggunakan Python locals()
函数,但使用的语法我并不完全了解,例如: options = " LOG.debug('%(flag)s : %(flag_get)s' % locals())
我尝试使用 LOG.info("My message %s" % locals())
来生成类似 的内容{'self': 9f80b6a9b02e2f6bd3a3a454f4c1763b}
. Sebarang input tentang ini?
Saya tahu cara menggunakan pengelogan dan menambah pengendali padanya untuk log ke fail, tetapi saya tidak pasti sama ada saya boleh menggunakan satu fail untuk log semua mesej log dalam susunan panggilan fungsi yang betul dalam projek saya.
Anda mempunyai beberapa soalan yang tidak berkaitan di sini.
Saya akan mulakan dengan yang paling mudah: (3). Menggunakan logging
anda boleh mengagregatkan semua panggilan ke satu fail log atau destinasi output lain: ia akan disusun mengikut urutan ia berlaku dalam proses.
Langkah seterusnya: (2). Nilai locals()
提供当前范围的字典。因此,在没有其他参数的方法中,作用域中有 self
,其中包含对当前实例的引用。所使用的让您感到困惑的技巧是使用字典作为 %
运算符的 rhs 的字符串格式。 "%(foo)s" % bar
将被替换为 bar["foo"]
.
Akhir sekali, anda boleh menggunakan beberapa teknik introspeksi, sama seperti yang digunakan oleh pdb
untuk merekod maklumat lanjut:
def autolog(message): "Automatically log the current function details." import inspect, logging # Get the previous frame in the stack, otherwise it would # be this function!!! func = inspect.currentframe().f_back.f_code # Dump the message + the name of this function to the log. logging.debug("%s: %s in %s:%i" % ( message, func.co_name, func.co_filename, func.co_firstlineno ))
Ini akan log mesej masuk, ditambah dengan nama fungsi (asal), nama fail yang ditakrifkan dan baris dalam fail itu. Lihat periksa - Periksa objek hidup untuk mendapatkan butiran lanjut.
Seperti yang saya nyatakan dalam ulasan sebelum ini, anda juga boleh sentiasa memasukkan baris import pdb untuk memasuki <code>import pdb; 行,进入 <code>pdb
交互式调试提示符。 pdb.set_trace() gesaan nyahpepijat interaktif. pdb.set_trace() dan jalankan semula program anda. Ini membolehkan anda melangkah melalui kod, memeriksa data mengikut pilihan anda.
Atas ialah kandungan terperinci Pengelogan Python menggunakan satu fail (nama fungsi, nama fail, nombor baris). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!