Apakah mungkin untuk mendekorasi / memperluas sistem logging standar python, sehingga ketika metode logging dipanggil, ia juga mencatat file dan nomor baris di mana ia dipanggil atau mungkin metode yang memanggilnya?
123
Tentu, periksa pemformat di dokumen logging. Khususnya variabel lineno dan pathname.
% (pathname) s Nama path lengkap dari file sumber tempat panggilan logging dikeluarkan (jika tersedia).
% (nama file) s Bagian nama file dari nama jalur.
% (module) s Module (bagian nama dari nama file).
% (funcName) s Nama fungsi yang berisi panggilan logging.
% (lineno) d Nomor baris sumber tempat panggilan logging dikeluarkan (jika tersedia).
Tampak seperti ini:
formatter = logging.Formatter('[%(asctime)s] p%(process)s {%(pathname)s:%(lineno)d} %(levelname)s - %(message)s','%m-%d %H:%M:%S')
Di atas jawaban Seb yang sangat berguna , berikut adalah cuplikan kode praktis yang mendemonstrasikan penggunaan logger dengan format yang masuk akal:
Menghasilkan keluaran ini:
sumber
Untuk membangun di atas dengan cara mengirimkan logging debug ke standar:
Menempatkan di atas ke dalam file bernama
debug_logging_example.py
menghasilkan output:Kemudian jika Anda ingin mematikan komentar keluar
root.setLevel(logging.DEBUG)
.Untuk file tunggal (mis. Tugas kelas) saya telah menemukan cara yang jauh lebih baik untuk melakukan ini dibandingkan dengan menggunakan
print()
pernyataan. Jika memungkinkan Anda menonaktifkan keluaran debug di satu tempat sebelum Anda mengirimkannya.sumber
Untuk dev yang menggunakan PyCharm atau Eclipse pydev, berikut ini akan menghasilkan tautan ke sumber pernyataan log di keluaran log konsol:
Lihat hyperlink file sumber Pydev di konsol Eclipse untuk diskusi dan riwayat yang lebih lama.
sumber
Berbeda dari jawaban lain, ini akan mencatat jalur lengkap file dan nama fungsi yang mungkin telah terjadi kesalahan. Ini berguna jika Anda memiliki proyek dengan lebih dari satu modul dan beberapa file dengan nama yang sama didistribusikan di modul ini.
sumber