Secara default, pustaka Permintaan python menulis pesan log ke konsol, di sepanjang baris:
Starting new HTTP connection (1): example.com
http://example.com:80 "GET / HTTP/1.1" 200 606
Saya biasanya tidak tertarik dengan pesan-pesan ini, dan ingin menonaktifkannya. Apa cara terbaik untuk membungkam pesan-pesan itu atau mengurangi verbositas Permintaan?
python
logging
python-requests
verbosity
aknuds1
sumber
sumber
Jawaban:
Saya menemukan cara mengkonfigurasi tingkat pencatatan permintaan , dilakukan melalui modul pencatatan standar . Saya memutuskan untuk mengonfigurasinya agar tidak mencatat pesan kecuali itu setidaknya peringatan:
Jika Anda ingin menerapkan pengaturan ini untuk pustaka urllib3 (biasanya digunakan oleh permintaan), tambahkan berikut ini:
sumber
pysimplesoap
, dan jawaban ini membantu saya menyelamatkan hari sayagetLogger("urllib3")
untuk menekan pesan.Jika Anda datang ke sini mencari cara untuk memodifikasi logging dari setiap (mungkin sangat bersarang) modul, gunakan
logging.Logger.manager.loggerDict
untuk mendapatkan kamus dari semua objek logger. Nama-nama yang dikembalikan kemudian dapat digunakan sebagai argumen untuklogging.getLogger
:Per pengguna136036 dalam komentar, perlu diketahui bahwa metode ini hanya menunjukkan kepada Anda para penebang yang ada pada saat Anda menjalankan cuplikan di atas. Jika, misalnya, modul membuat logger baru ketika Anda membuat instance sebuah kelas, maka Anda harus meletakkan potongan ini setelah membuat kelas untuk mencetak namanya.
sumber
urllib3
pesan log saat menggunakanboto3
. Logger dalam kasus ini adalahbotocore.vendored.requests.packages.urllib3
, jadi saya menggunakan ini:logging.getLogger("botocore.vendored.requests.packages.urllib3").setLevel(logging.WARNING)
dan saya akhirnya menyingkirkan pesan-pesannya.APScheduler
dilakukan saat Anda meneleponBackgroundScheduler.BackgroundScheduler()
.Dengan cara ini semua pesan level = INFO dari urllib3 tidak akan ada di logfile.
Jadi Anda dapat terus menggunakan level = INFO untuk pesan log Anda ... cukup modifikasi ini untuk perpustakaan yang Anda gunakan.
sumber
setLevel(logging.WARNING)
juga kemungkinan pesan peringatan dan kesalahan.Izinkan saya menyalin / menempel bagian dokumentasi yang saya tulis sekitar satu atau dua minggu yang lalu, setelah mengalami masalah yang serupa dengan Anda:
sumber
Bagi siapa pun yang menggunakan
logging.config.dictConfig
Anda dapat mengubah level log pustaka permintaan dalam kamus seperti ini:sumber
dictConfig
bawah kap.Menyetel nama logger sebagai
requests
ataurequests.urllib3
tidak berfungsi untuk saya. Saya harus menentukan nama logger yang tepat untuk mengubah level logging.Pertama Lihat penebang mana yang telah Anda tentukan, untuk melihat mana yang ingin Anda hapus
Dan Anda akan melihat sesuatu seperti ini:
{...'urllib3.poolmanager': <logging.Logger object at 0x1070a6e10>, 'django.request': <logging.Logger object at 0x106d61290>, 'django.template': <logging.Logger object at 0x10630dcd0>, 'django.server': <logging.Logger object at 0x106dd6a50>, 'urllib3.connection': <logging.Logger object at 0x10710a350>,'urllib3.connectionpool': <logging.Logger object at 0x106e09690> ...}
Kemudian konfigurasikan level untuk logger yang tepat:
sumber
Jika Anda memiliki file konfigurasi, Anda dapat mengonfigurasinya.
Tambahkan urllib3 di bagian penebang:
Tambahkan bagian logger_urllib3:
sumber
Jawaban ini ada di sini: Python: bagaimana cara menekan pernyataan logging dari perpustakaan pihak ketiga?
Anda dapat meninggalkan level logging standar untuk basicConfig, dan kemudian Anda mengatur level DEBUG ketika Anda mendapatkan logger untuk modul Anda.
sumber
sumber
Panduan Kbrose tentang menemukan logger mana yang menghasilkan pesan log sangat berguna. Untuk proyek Django saya, saya harus memilah-milah 120 penebang yang berbeda sampai saya menemukan bahwa itu adalah
elasticsearch
perpustakaan Python yang menyebabkan masalah bagi saya. Sesuai panduan dalam sebagian besar pertanyaan, saya menonaktifkannya dengan menambahkan ini ke penebang saya:Posting di sini kalau-kalau ada orang lain melihat pesan log yang tidak membantu datang setiap kali mereka menjalankan kueri Elasticsearch.
sumber
sederhana: cukup tambahkan
requests.packages.urllib3.disable_warnings()
setelahimport requests
sumber
INFO
.Saya tidak yakin apakah pendekatan sebelumnya telah berhenti berfungsi, tetapi dalam hal apa pun, berikut cara lain untuk menghapus peringatan:
Pada dasarnya, menambahkan variabel lingkungan dalam konteks eksekusi skrip.
Dari dokumentasi: https://urllib3.readthedocs.org/en/latest/security.html#disabling-warnings
sumber