Untuk kode berikut:
logger.debug('message: {}'.format('test'))
pylint
menghasilkan peringatan berikut:
logging-format-interpolasi (W1202):
Gunakan% pemformatan dalam fungsi logging dan berikan parameter% sebagai argumen Digunakan ketika pernyataan logging memiliki bentuk panggilan "logging. (Format_string.format (format_args ...))". Panggilan seperti itu harus menggunakan format% sebagai gantinya, tetapi meninggalkan interpolasi ke fungsi logging dengan meneruskan parameter sebagai argumen.
Saya tahu saya bisa mematikan peringatan ini, tetapi saya ingin memahaminya. Saya berasumsi menggunakan format()
adalah cara yang disukai untuk mencetak pernyataan dengan Python 3. Mengapa ini tidak benar untuk pernyataan logger?
sumber
.format()
gaya di beberapa titik karenalogging
telah ditingkatkan? Saya bertanya karena saya lebih tertarik pada kemampuan pemeliharaan daripada kinerja kecepatan yang tinggi, setidaknya untuk sebagian besar tugas.Mungkin perbedaan kali ini dapat membantu Anda.
Deskripsi berikut bukan jawaban untuk pertanyaan Anda, tetapi dapat membantu orang.
Untuk pylint 2.4: Ada 3 pilihan untuk gaya logging di
.pylintrc
berkas:old
,new
,fstr
fstr
opsi ditambahkan pada 2.4 dan dihapus pada 2.5Deskripsi dari
.pylintrc
file (v2.4):untuk yang lama (
logging-format-style=old
):untuk baru (
logging-format-style=new
):Catatan : Anda tidak dapat menggunakan
.format()
bahkan jika Anda memilihnew
opsi.pylint masih memberikan peringatan yang sama untuk kode ini:
untuk fstr (
logging-format-style=fstr
):Secara pribadi, saya lebih suka opsi fstr karena PEP-0498 .
sumber
"python.linting.pylintArgs": ["--logging-format-style=old"]
ke file vscode / settings.json. docsoptparse.OptionValueError: option logging-format-style: invalid value: 'fstr', should be in ['old', 'new']
memutakhirkan ke pylint terbaru (2.4.4) memperbaikinya.Try installing a more recent version of python-pylint, and please open a bug report if the issue persists in t\ he latest release. Thanks!
Dalam pengalaman saya, alasan yang lebih menarik daripada optimasi (untuk kebanyakan kasus penggunaan) untuk interpolasi yang malas adalah karena ia berfungsi dengan baik dengan agregator log seperti Sentry.
Pertimbangkan pesan log 'pengguna masuk'. Jika Anda menginterpolasi pengguna ke dalam format string, Anda memiliki banyak pesan log berbeda seperti halnya ada pengguna. Jika Anda menggunakan interpolasi malas seperti ini, agregator log dapat lebih menafsirkan ini sebagai pesan log yang sama dengan banyak contoh berbeda.
sumber