Python mencatat semua kesalahan ke file

Merupakan ide bagus untuk menyimpan semua pesan kesalahan yang diangkat oleh suatu program ke dalam file. File yang menyimpan pesan, terutama kesalahan atau pengecualian disebut file 'log' dan teknik ini disebut 'logging'. Saat kami menyimpan pesan ke dalam file log, kami dapat membuka file dan membacanya atau mencetak file nanti. Ini membantu pemrogram untuk memahami berapa banyak kesalahan yang ada, nama kesalahan tersebut dan di mana kesalahan tersebut terjadi dalam program. Informasi ini akan memungkinkan mereka untuk menunjukkan kesalahan dan juga memperbaikinya dengan mudah. Jadi, logging membantu dalam men-debug program

Python menyediakan modul 'logging' yang berguna untuk membuat file log yang dapat menyimpan semua pesan kesalahan yang mungkin terjadi saat mengeksekusi suatu program

Mungkin ada tingkat pesan kesalahan yang berbeda. Misalnya, kesalahan yang merusak sistem harus dianggap lebih penting daripada kesalahan yang hanya menampilkan pesan peringatan. Jadi, tergantung pada keseriusan kesalahan, mereka diklasifikasikan menjadi 6 level dalam modul 'logging', seperti yang ditunjukkan pada Tabel

Tingkat Kesalahan Logging dan Nilai Numerik yang Ditentukan Sebelumnya

LevelNumeric valueDescriptionCRITICAL50Mewakili kesalahan yang sangat serius yang membutuhkan perhatian tinggi. ERROR40Mewakili kesalahan seriusPERINGATAN30Mewakili pesan peringatan, diperlukan kehati-hatian. INFO20Mewakili pesan dengan beberapa informasi penting. DEBUG10Mewakili pesan dengan informasi debug. NOTSET0Mewakili bahwa level tidak diatur

Seperti yang kita ketahui, secara default, pesan kesalahan yang terjadi pada saat mengeksekusi suatu program ditampilkan di monitor pengguna. Hanya pesan yang sama dengan atau di atas tingkat PERINGATAN yang ditampilkan. Itu berarti PERINGATAN, KESALAHAN dan KESALAHAN KRITIS ditampilkan. Mungkin saja kita dapat mengatur perilaku default ini sesuai kebutuhan

Untuk memahami berbagai tingkat pesan logging, kita akan menulis program Python. Dalam program ini, pertama-tama kita harus membuat file untuk mencatat (menyimpan) pesan. Ini dilakukan dengan menggunakan metode basicConfig() dari modul logging as

penebangan. basicConfig(namafile='mylog. txt', level=pencatatan. KESALAHAN)

Di sini, nama file log diberikan sebagai mylog. txt'. Level disetel ke ERROR. Oleh karena itu, pesan yang levelnya ERROR atau lebih tinggi, (mis. e. ERROR atau CRITICAL) hanya akan disimpan ke dalam file log. Setelah selesai, kita dapat menambahkan pesan ke 'mylog. txt' sebagai

penebangan. nama metode('pesan')

Nama metode bisa critical(), error(), warning(), info() dan debug(). Misalnya, kita ingin menambahkan pesan kritis, kita harus menggunakan metode critical() sebagai

Logging adalah alat yang sangat berguna dalam toolbox programmer. Ini dapat membantu Anda mengembangkan pemahaman yang lebih baik tentang alur program dan menemukan skenario yang mungkin tidak terpikirkan oleh Anda saat mengembangkan

Log memberi pengembang satu set mata ekstra yang terus-menerus melihat aliran yang dilalui aplikasi. Mereka dapat menyimpan informasi, seperti pengguna atau IP mana yang mengakses aplikasi. Jika terjadi kesalahan, maka mereka dapat memberikan lebih banyak wawasan daripada pelacakan tumpukan dengan memberi tahu Anda keadaan program sebelum tiba di baris kode tempat kesalahan terjadi

Dengan mencatat data yang berguna dari tempat yang tepat, Anda tidak hanya dapat men-debug kesalahan dengan mudah tetapi juga menggunakan data tersebut untuk menganalisis kinerja aplikasi untuk merencanakan penskalaan atau melihat pola penggunaan untuk merencanakan pemasaran

Python menyediakan sistem logging sebagai bagian dari pustaka standarnya, sehingga Anda dapat dengan cepat menambahkan logging ke aplikasi Anda. Dalam artikel ini, Anda akan mempelajari mengapa menggunakan modul ini adalah cara terbaik untuk menambahkan logging ke aplikasi Anda serta cara memulai dengan cepat, dan Anda akan mendapatkan pengantar untuk beberapa fitur lanjutan yang tersedia

Bonus Gratis. 5 Pemikiran Tentang Python Mastery, kursus gratis untuk pengembang Python yang menunjukkan kepada Anda peta jalan dan pola pikir yang Anda perlukan untuk meningkatkan keterampilan Python Anda ke tingkat berikutnya

Modul Pencatatan

Modul logging di Python adalah modul siap pakai dan kuat yang dirancang untuk memenuhi kebutuhan pemula serta tim perusahaan. Ini digunakan oleh sebagian besar pustaka Python pihak ketiga, sehingga Anda dapat mengintegrasikan pesan log Anda dengan pesan dari pustaka tersebut untuk menghasilkan log homogen untuk aplikasi Anda

Menambahkan logging ke program Python Anda semudah ini

import logging

Dengan modul logging yang diimpor, Anda dapat menggunakan sesuatu yang disebut “logger” untuk mencatat pesan yang ingin Anda lihat. Secara default, ada 5 level standar yang menunjukkan tingkat keparahan peristiwa. Masing-masing memiliki metode terkait yang dapat digunakan untuk mencatat peristiwa pada tingkat keparahan tersebut. Level yang ditentukan, dalam urutan peningkatan keparahan, adalah sebagai berikut

  • DEBUG
  • INFO
  • PERINGATAN
  • KESALAHAN
  • KRITIS

Modul logging memberi Anda logger default yang memungkinkan Anda untuk memulai tanpa perlu melakukan banyak konfigurasi. Metode yang sesuai untuk setiap level dapat dipanggil seperti yang ditunjukkan pada contoh berikut

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_

Output dari program di atas akan terlihat seperti ini

WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message

Output menunjukkan tingkat keparahan sebelum setiap pesan bersama dengan

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
7, yang merupakan nama yang diberikan modul logging ke logger defaultnya. (Logger dibahas secara rinci di bagian selanjutnya. ) Format ini, yang menunjukkan level, nama, dan pesan yang dipisahkan oleh titik dua (
import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
8), adalah format keluaran default yang dapat dikonfigurasi untuk memasukkan hal-hal seperti stempel waktu, nomor baris, dan detail lainnya

Perhatikan bahwa pesan

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
_9 dan
DEBUG:root:This will get logged
0 tidak dicatat. Ini karena, secara default, modul logging mencatat pesan dengan tingkat keparahan
DEBUG:root:This will get logged
1 atau lebih tinggi. Anda dapat mengubahnya dengan mengonfigurasi modul logging untuk mencatat peristiwa di semua level jika Anda mau. Anda juga dapat menentukan tingkat keparahan Anda sendiri dengan mengubah konfigurasi, tetapi umumnya tidak disarankan karena dapat menyebabkan kebingungan dengan log beberapa pustaka pihak ketiga yang mungkin Anda gunakan

Hilangkan iklan

Konfigurasi Dasar

Anda dapat menggunakan metode

DEBUG:root:This will get logged
2
DEBUG:root:This will get logged
3
DEBUG:root:This will get logged
4 untuk mengonfigurasi logging

“Anda akan melihat bahwa modul logging merusak panduan gaya PEP8 dan menggunakan

DEBUG:root:This will get logged
5 konvensi penamaan. Ini karena diadopsi dari Log4j, utilitas logging di Java. Ini adalah masalah yang diketahui dalam paket, tetapi pada saat diputuskan untuk menambahkannya ke perpustakaan standar, itu telah diadopsi oleh pengguna dan mengubahnya untuk memenuhi persyaratan PEP8 akan menyebabkan masalah kompatibilitas mundur. " (Sumber)

Beberapa parameter yang umum digunakan untuk

DEBUG:root:This will get logged
_6 adalah sebagai berikut

  • DEBUG:root:This will get logged
    
    _7. Root logger akan diatur ke tingkat keparahan yang ditentukan
  • DEBUG:root:This will get logged
    
    _8. Ini menentukan file
  • DEBUG:root:This will get logged
    
    _9. Jika
    DEBUG:root:This will get logged
    
    _8 diberikan, file dibuka dalam mode ini. Standarnya adalah
    import logging
    
    logging.basicConfig(filename='app.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')
    logging.warning('This will get logged to a file')
    
    _1, yang berarti menambahkan
  • import logging
    
    logging.basicConfig(filename='app.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')
    logging.warning('This will get logged to a file')
    
    2. Ini adalah format pesan log

Dengan menggunakan parameter

DEBUG:root:This will get logged
_7, Anda dapat mengatur tingkat pesan log yang ingin Anda rekam. Ini dapat dilakukan dengan meneruskan salah satu konstanta yang tersedia di kelas, dan ini akan memungkinkan semua panggilan logging pada atau di atas level tersebut untuk dicatat. Ini sebuah contoh

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')

DEBUG:root:This will get logged
_

Semua peristiwa pada atau di atas level

import logging

logging.basicConfig(filename='app.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')
logging.warning('This will get logged to a file')
_4 sekarang akan dicatat

Demikian pula, untuk masuk ke file daripada konsol,

DEBUG:root:This will get logged
8 dan
DEBUG:root:This will get logged
9 dapat digunakan, dan Anda dapat menentukan format pesan menggunakan
import logging

logging.basicConfig(filename='app.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')
logging.warning('This will get logged to a file')
2. Contoh berikut menunjukkan penggunaan ketiganya

import logging

logging.basicConfig(filename='app.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')
logging.warning('This will get logged to a file')

root - ERROR - This will get logged to a file

Pesan akan terlihat seperti ini tetapi akan ditulis ke file bernama

import logging

logging.basicConfig(filename='app.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')
logging.warning('This will get logged to a file')
8 bukan konsol. Filemode diatur ke
import logging

logging.basicConfig(filename='app.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')
logging.warning('This will get logged to a file')
_9, yang berarti file log dibuka dalam "mode tulis" setiap kali
DEBUG:root:This will get logged
6 dipanggil, dan setiap menjalankan program akan menulis ulang file. Konfigurasi default untuk mode file adalah
import logging

logging.basicConfig(filename='app.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')
logging.warning('This will get logged to a file')
1, yang ditambahkan

Anda dapat menyesuaikan root logger lebih jauh lagi dengan menggunakan lebih banyak parameter untuk

DEBUG:root:This will get logged
6, yang dapat ditemukan

Perlu dicatat bahwa memanggil

DEBUG:root:This will get logged
_6 untuk mengkonfigurasi root logger hanya berfungsi jika root logger belum dikonfigurasi sebelumnya. Pada dasarnya, fungsi ini hanya bisa dipanggil satu kali

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
9,
DEBUG:root:This will get logged
0,
root - ERROR - This will get logged to a file
6,
root - ERROR - This will get logged to a file
7, dan
root - ERROR - This will get logged to a file
8 juga memanggil
DEBUG:root:This will get logged
6 tanpa argumen secara otomatis jika belum pernah dipanggil sebelumnya. Ini berarti bahwa setelah pertama kali salah satu fungsi di atas dipanggil, Anda tidak dapat lagi mengkonfigurasi root logger karena mereka akan memanggil fungsi
DEBUG:root:This will get logged
6 secara internal

Pengaturan default di

DEBUG:root:This will get logged
_6 adalah mengatur logger untuk menulis ke konsol dalam format berikut

ERROR:root:This is an error message

Memformat Keluaran

Meskipun Anda dapat meneruskan variabel apa pun yang dapat direpresentasikan sebagai string dari program Anda sebagai pesan ke log Anda, ada beberapa elemen dasar yang sudah menjadi bagian dari

ERROR:root:This is an error message
2 dan dapat dengan mudah ditambahkan ke format keluaran. Jika Anda ingin mencatat ID proses bersama dengan level dan pesan, Anda dapat melakukan hal seperti ini

import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')

18472-WARNING-This is a Warning

import logging

logging.basicConfig(filename='app.log', filemode='w', format='%(name)s - %(levelname)s - %(message)s')
logging.warning('This will get logged to a file')
2 dapat mengambil string dengan
ERROR:root:This is an error message
2 atribut dalam pengaturan apa pun yang Anda suka. Seluruh daftar atribut yang tersedia dapat ditemukan

Berikut contoh lain di mana Anda dapat menambahkan info tanggal dan waktu

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_0

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_1

ERROR:root:This is an error message
5 menambahkan waktu pembuatan
ERROR:root:This is an error message
2. Format dapat diubah menggunakan atribut
ERROR:root:This is an error message
_7, yang menggunakan bahasa pemformatan yang sama dengan fungsi pemformatan dalam modul datetime, seperti
ERROR:root:This is an error message
8

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_2

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_3

Anda dapat menemukan panduannya

Hilangkan iklan

Mencatat Data Variabel

Dalam kebanyakan kasus, Anda ingin memasukkan informasi dinamis dari aplikasi Anda ke dalam log. Anda telah melihat bahwa metode logging menggunakan string sebagai argumen, dan tampaknya wajar untuk memformat string dengan data variabel dalam baris terpisah dan meneruskannya ke metode log. Tapi ini sebenarnya bisa dilakukan secara langsung dengan menggunakan format string untuk pesan dan menambahkan data variabel sebagai argumen. Ini sebuah contoh

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_4

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_5

Argumen yang diteruskan ke metode akan dimasukkan sebagai data variabel dalam pesan

Meskipun Anda dapat menggunakan gaya pemformatan apa pun, f-string diperkenalkan di Python 3. 6 adalah cara yang luar biasa untuk memformat string karena dapat membantu membuat format tetap pendek dan mudah dibaca

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_6

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_5

Menangkap Jejak Tumpukan

Modul logging juga memungkinkan Anda menangkap pelacakan tumpukan penuh dalam aplikasi. Informasi pengecualian dapat ditangkap jika parameter

ERROR:root:This is an error message
9 diteruskan sebagai
import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
0, dan fungsi logging disebut seperti ini

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_8

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_9

Jika

ERROR:root:This is an error message
_9 tidak disetel ke
import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
0, output dari program di atas tidak akan memberi tahu kita apa pun tentang pengecualian, yang, dalam skenario dunia nyata, mungkin tidak sesederhana
import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
3. Bayangkan mencoba men-debug kesalahan dalam basis kode yang rumit dengan log yang hanya menampilkan ini

WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message
0

Ini tip singkatnya. jika Anda masuk dari penangan pengecualian, gunakan metode

import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
4, yang mencatat pesan dengan level
import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
5 dan menambahkan informasi pengecualian ke pesan. Sederhananya, menelepon
import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
4 seperti menelepon
import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
7. Tetapi karena metode ini selalu membuang informasi pengecualian, metode ini hanya boleh dipanggil dari penangan pengecualian. Lihatlah contoh ini

WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message
1

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_9

Menggunakan

import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
_4 akan menampilkan log pada level
import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
5. Jika Anda tidak menginginkannya, Anda dapat memanggil salah satu metode logging lainnya dari
import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
9 ke
root - ERROR - This will get logged to a file
8 dan meneruskan parameter
ERROR:root:This is an error message
9 sebagai
import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
0

Kelas dan Fungsi

Sejauh ini, kita telah melihat logger default bernama

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
7, yang digunakan oleh modul logging setiap kali fungsinya dipanggil secara langsung seperti ini.
18472-WARNING-This is a Warning
5. Anda dapat (dan harus) mendefinisikan logger Anda sendiri dengan membuat objek dari kelas
18472-WARNING-This is a Warning
6, terutama jika aplikasi Anda memiliki banyak modul. Mari kita lihat beberapa kelas dan fungsi dalam modul

Kelas yang paling umum digunakan yang didefinisikan dalam modul logging adalah sebagai berikut

  • 18472-WARNING-This is a Warning
    
    6. Ini adalah kelas yang objeknya akan digunakan dalam kode aplikasi secara langsung untuk memanggil fungsi

  • ERROR:root:This is an error message
    
    2. Penebang secara otomatis membuat objek
    ERROR:root:This is an error message
    
    2 yang memiliki semua informasi terkait peristiwa yang sedang dicatat, seperti nama pencatat, fungsi, nomor baris, pesan, dan lainnya

  • import logging
    
    logging.debug('This is a debug message')
    logging.info('This is an info message')
    logging.warning('This is a warning message')
    logging.error('This is an error message')
    logging.critical('This is a critical message')
    
    _00. Penangan mengirim
    ERROR:root:This is an error message
    
    _2 ke tujuan keluaran yang diperlukan, seperti konsol atau file.
    import logging
    
    logging.debug('This is a debug message')
    logging.info('This is an info message')
    logging.warning('This is a warning message')
    logging.error('This is an error message')
    logging.critical('This is a critical message')
    
    _00 adalah basis untuk subkelas seperti
    import logging
    
    logging.debug('This is a debug message')
    logging.info('This is an info message')
    logging.warning('This is a warning message')
    logging.error('This is an error message')
    logging.critical('This is a critical message')
    
    03,
    import logging
    
    logging.debug('This is a debug message')
    logging.info('This is an info message')
    logging.warning('This is a warning message')
    logging.error('This is an error message')
    logging.critical('This is a critical message')
    
    04,
    import logging
    
    logging.debug('This is a debug message')
    logging.info('This is an info message')
    logging.warning('This is a warning message')
    logging.error('This is an error message')
    logging.critical('This is a critical message')
    
    05,
    import logging
    
    logging.debug('This is a debug message')
    logging.info('This is an info message')
    logging.warning('This is a warning message')
    logging.error('This is an error message')
    logging.critical('This is a critical message')
    
    06, dan lainnya. Subkelas ini mengirimkan keluaran logging ke tujuan yang sesuai, seperti
    import logging
    
    logging.debug('This is a debug message')
    logging.info('This is an info message')
    logging.warning('This is a warning message')
    logging.error('This is an error message')
    logging.critical('This is a critical message')
    
    07 atau file disk

  • import logging
    
    logging.debug('This is a debug message')
    logging.info('This is an info message')
    logging.warning('This is a warning message')
    logging.error('This is an error message')
    logging.critical('This is a critical message')
    
    _08. Di sinilah Anda menentukan format output dengan menentukan format string yang mencantumkan atribut yang harus berisi output

Dari jumlah tersebut, kami sebagian besar berurusan dengan objek dari kelas

18472-WARNING-This is a Warning
6, yang dibuat menggunakan fungsi tingkat modul
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
10. Beberapa panggilan ke
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_11 dengan
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
12 yang sama akan mengembalikan referensi ke objek
18472-WARNING-This is a Warning
6 yang sama, yang menyelamatkan kita dari meneruskan objek logger ke setiap bagian yang membutuhkannya. Ini sebuah contoh

WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message
_3

WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message
_4

Ini membuat logger kustom bernama

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_14, tetapi tidak seperti root logger, nama logger kustom bukan bagian dari format output default dan harus ditambahkan ke konfigurasi. Mengkonfigurasinya ke format untuk menampilkan nama logger akan memberikan hasil seperti ini

WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message
5

Sekali lagi, tidak seperti root logger, custom logger tidak dapat dikonfigurasi menggunakan

DEBUG:root:This will get logged
6. Anda harus mengonfigurasinya menggunakan Handler dan Formatter

“Direkomendasikan agar kami menggunakan logger tingkat modul dengan meneruskan

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
16 sebagai parameter nama ke
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
11 untuk membuat objek logger karena nama logger itu sendiri akan memberi tahu kami dari mana peristiwa dicatat.
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_16 adalah variabel bawaan khusus di Python yang mengevaluasi nama modul saat ini. ”

Hilangkan iklan

Menggunakan Handler

Penangan masuk ke dalam gambar saat Anda ingin mengonfigurasi logger Anda sendiri dan mengirim log ke beberapa tempat saat dibuat. Penangan mengirim pesan log ke tujuan yang dikonfigurasi seperti aliran keluaran standar atau file atau melalui HTTP atau ke email Anda melalui SMTP

Logger yang Anda buat dapat memiliki lebih dari satu penangan, yang berarti Anda dapat mengaturnya untuk disimpan ke file log dan juga mengirimkannya melalui email

Seperti penebang, Anda juga dapat mengatur tingkat keparahan dalam penangan. Ini berguna jika Anda ingin menetapkan beberapa penangan untuk logger yang sama tetapi menginginkan tingkat keparahan yang berbeda untuk masing-masingnya. Misalnya, Anda mungkin ingin log dengan level

DEBUG:root:This will get logged
1 dan lebih tinggi untuk dicatat ke konsol, tetapi semuanya dengan level
import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
5 dan lebih tinggi juga harus disimpan ke file. Inilah program yang melakukan itu

WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message
6

WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message
7

Di sini,

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_21 membuat
ERROR:root:This is an error message
2 yang menyimpan semua informasi acara dan meneruskannya ke semua Penangan yang dimilikinya.
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_23 dan
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
24

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_23 adalah
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
03 dengan level
DEBUG:root:This will get logged
1 dan mengambil info dari
ERROR:root:This is an error message
2 untuk menghasilkan output dalam format yang ditentukan dan mencetaknya ke konsol.
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_24 adalah
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
04 dengan level
import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
5, dan mengabaikan
ERROR:root:This is an error message
2 ini karena levelnya adalah
DEBUG:root:This will get logged
1

Ketika

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
_34 dipanggil,
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
23 berperilaku persis seperti sebelumnya, dan
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
24 mendapatkan
ERROR:root:This is an error message
2 pada level
import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
5, sehingga menghasilkan output seperti
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
23, tetapi alih-alih mencetaknya ke konsol, ia menulisnya ke file yang ditentukan dalam hal ini

WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message
_8

Nama logger yang sesuai dengan variabel

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
16 dicatat sebagai
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
41, yang merupakan nama yang diberikan Python ke modul tempat eksekusi dimulai. Jika file ini diimpor oleh beberapa modul lain, maka variabel
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
16 akan sesuai dengan namanya logging_example. Begini tampilannya

WARNING:root:This is a warning message
ERROR:root:This is an error message
CRITICAL:root:This is a critical message
_9

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
0

Metode Konfigurasi Lainnya

Anda dapat mengonfigurasi logging seperti yang ditunjukkan di atas menggunakan modul dan fungsi kelas atau dengan membuat file konfigurasi atau kamus dan memuatnya masing-masing menggunakan

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
43 atau
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
44. Ini berguna jika Anda ingin mengubah konfigurasi logging Anda di aplikasi yang sedang berjalan

Berikut adalah contoh konfigurasi file

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
1

Pada file di atas, terdapat dua logger, satu handler, dan satu formatter. Setelah namanya ditentukan, mereka dikonfigurasikan dengan menambahkan kata logger, handler, dan formatter sebelum namanya dipisahkan dengan garis bawah

Untuk memuat file konfigurasi ini, Anda harus menggunakan

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
43

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
2

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
_3

Jalur file konfigurasi diteruskan sebagai parameter ke metode

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
43, dan parameter
import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
47 digunakan untuk menyimpan atau menonaktifkan penebang yang ada saat fungsi dipanggil. Standarnya adalah
import logging

logging.basicConfig(format='%(process)d-%(levelname)s-%(message)s')
logging.warning('This is a Warning')
_0 jika tidak disebutkan

Berikut konfigurasi yang sama dalam format YAML untuk pendekatan kamus

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
_4

Berikut adalah contoh yang menunjukkan cara memuat konfigurasi dari file

import logging

logging.debug('This is a debug message')
logging.info('This is an info message')
logging.warning('This is a warning message')
logging.error('This is an error message')
logging.critical('This is a critical message')
49

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
5

import logging

logging.basicConfig(level=logging.DEBUG)
logging.debug('This will get logged')
6

Hilangkan iklan

Tetap Tenang dan Baca Log

Modul logging dianggap sangat fleksibel. Desainnya sangat praktis dan harus sesuai dengan kasus penggunaan Anda di luar kotak. Anda dapat menambahkan logging dasar ke proyek kecil, atau Anda dapat membuat level log kustom Anda sendiri, kelas penangan, dan lainnya jika Anda sedang mengerjakan proyek besar

Jika Anda belum pernah menggunakan masuk ke aplikasi Anda, sekarang adalah saat yang tepat untuk memulai. Jika dilakukan dengan benar, logging pasti akan menghilangkan banyak gesekan dari proses pengembangan Anda dan membantu Anda menemukan peluang untuk membawa aplikasi Anda ke level selanjutnya

Tandai sebagai Selesai

Tonton Sekarang Tutorial ini memiliki kursus video terkait yang dibuat oleh tim Real Python. Tonton bersama dengan tutorial tertulis untuk memperdalam pemahaman Anda. Masuk dengan Python

🐍 Trik Python 💌

Dapatkan Trik Python singkat & manis yang dikirim ke kotak masuk Anda setiap beberapa hari. Tidak pernah ada spam. Berhenti berlangganan kapan saja. Dikuratori oleh tim Real Python

Python mencatat semua kesalahan ke file

Kirimi Saya Trik Python »

Tentang Abhinav Ajitsaria

Python mencatat semua kesalahan ke file
Python mencatat semua kesalahan ke file

Abhinav adalah Insinyur Perangkat Lunak dari India. Dia suka berbicara tentang desain sistem, pembelajaran mesin, AWS, dan tentu saja, Python

» Lebih lanjut tentang Abhinav


Setiap tutorial di Real Python dibuat oleh tim pengembang sehingga memenuhi standar kualitas tinggi kami. Anggota tim yang mengerjakan tutorial ini adalah

Python mencatat semua kesalahan ke file

Aldren

Python mencatat semua kesalahan ke file

Daud

Python mencatat semua kesalahan ke file

Dan

Python mencatat semua kesalahan ke file

Joanna

Master Keterampilan Python Dunia Nyata Dengan Akses Tanpa Batas ke Python Nyata

Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas pakar Pythonista

Tingkatkan Keterampilan Python Anda »

Guru Keterampilan Python Dunia Nyata
Dengan Akses Tak Terbatas ke Real Python

Bergabunglah dengan kami dan dapatkan akses ke ribuan tutorial, kursus video langsung, dan komunitas ahli Pythonista

Tingkatkan Keterampilan Python Anda »

Bagaimana menurut anda?

Nilai artikel ini

Tweet Bagikan Bagikan Email

Apa takeaway # 1 Anda atau hal favorit yang Anda pelajari?

Kiat Berkomentar. Komentar yang paling berguna adalah yang ditulis dengan tujuan belajar dari atau membantu siswa lain. dan dapatkan jawaban atas pertanyaan umum di portal dukungan kami

Bagaimana Anda mencatat semua kesalahan dengan Python?

Untuk mencatat pengecualian di Python, kita dapat menggunakan modul pencatatan dan melalui itu kita dapat mencatat kesalahan . Mencatat pengecualian dalam python dengan kesalahan dapat dilakukan di logging. pengecualian() metode. Fungsi ini mencatat pesan dengan level ERROR pada logger ini.

Bagaimana Anda menulis log ke file dengan Python?

Cara Memulai Mencatat Pesan dengan Python .
Impor modul logging
Konfigurasikan logger menggunakan metode basicConfig(). .
Tentukan file tujuan pengiriman pesan log
Tentukan tingkat "keseriusan" dari pesan log
Format pesan log
Tambahkan atau timpa pesan log sebelumnya dalam file

Bagaimana cara menggunakan getLogger dengan Python?

getLogger(name) biasanya dijalankan. Fungsi getLogger() menerima satu argumen - nama logger . Ini mengembalikan referensi ke instance logger dengan nama yang ditentukan jika disediakan, atau root jika tidak. Beberapa panggilan ke getLogger() dengan nama yang sama akan mengembalikan referensi ke objek logger yang sama.

Bagaimana cara membuat banyak file log dengan Python?

Python. mencatat status program ke dalam beberapa file untuk dianalisis .
penebangan. basicConfig(level=mencatat. INFO, filename='success_logs. txt', format='[%(asctime)s] %(levelname)s. %(pesan)s')
formatter = logging. Formatter('[%(asctime)s] %(levelname)s %(message)s')
penangan = logging. FileHandler(nama_file)