Tambahkan warna ke output modul logging
Python.
Colorlog saat ini membutuhkan Python 3.6 atau lebih tinggi. Versi yang lebih lama (di bawah 5.xx) mendukung Python 2.6 ke atas.
Colorama disertakan sebagai ketergantungan yang diperlukan dan diinisialisasi saat menggunakan ColorLog pada Windows.
Perpustakaan ini berusia lebih dari satu dekade dan mendukung serangkaian versi Python yang luas untuk sebagian besar kehidupannya, yang telah menjadikannya perpustakaan yang sulit untuk menambahkan fitur baru. ColorLog 6 dapat memecahkan kompatibilitas ke belakang sehingga fitur yang lebih baru dapat ditambahkan lebih mudah, tetapi mungkin masih belum menerima semua perubahan atau permintaan fitur. Colorlog 4 mungkin menerima perbaikan bug yang penting tetapi tidak boleh dianggap dipelihara secara aktif dan tidak akan menerima perubahan besar atau fitur baru.
Instal dari PYPI dengan:
pip install colorlog
Beberapa distribusi Linux menyediakan paket resmi (Debian, Arch, Fedora, Gentoo, OpenSUSE dan Ubuntu), dan lainnya memiliki paket yang disediakan pengguna (port BSD, Conda).
import colorlog
handler = colorlog . StreamHandler ()
handler . setFormatter ( colorlog . ColoredFormatter (
'%(log_color)s%(levelname)s:%(name)s:%(message)s' ))
logger = colorlog . getLogger ( 'example' )
logger . addHandler ( handler )
Kelas ColoredFormatter
mengambil beberapa argumen:
format
: String format yang digunakan untuk mengeluarkan pesan (diperlukan).datefmt
: Format tanggal opsional diteruskan ke kelas dasar. Lihat logging.Formatter
.reset
: Secara implisit menambahkan kode reset warna ke output pesan, kecuali output sudah berakhir dengan satu. Default ke True
.log_colors
: Pemetaan nama level rekaman ke nama warna. Default dapat ditemukan di colorlog.default_log_colors
, atau contoh di bawah ini.secondary_log_colors
: Pemetaan nama untuk pemetaan gaya log_colors
, mendefinisikan warna tambahan yang dapat digunakan dalam string format. Lihat di bawah untuk contoh.style
: Tersedia di Python 3.2 ke atas. Lihat logging.Formatter
.Kode pelarian warna dapat dipilih berdasarkan level catatan log, dengan menambahkan parameter ke string format:
log_color
: Mengembalikan warna yang terkait dengan level catatan.<name>_log_color
: Kembalikan warna lain berdasarkan level catatan jika formatter memiliki warna sekunder yang dikonfigurasi (lihat secondary_log_colors
di bawah). Beberapa kode pelarian dapat digunakan sekaligus dengan bergabung dengan mereka dengan koma saat mengkonfigurasi warna untuk level log (tetapi tidak dapat digunakan langsung dalam string format). Misalnya, black,bg_white
akan menggunakan kode pelarian untuk teks hitam dengan latar belakang putih.
Kode pelarian berikut tersedia untuk digunakan dalam string format:
{color}
, fg_{color}
, bg_{color}
: warna latar belakang dan latar belakang.bold
, bold_{color}
, fg_bold_{color}
, bg_bold_{color}
: warna tebal/cerah.thin
, thin_{color}
, fg_thin_{color}
: warna tipis (tergantung terminal).reset
: Bersihkan semua pemformatan (baik latar depan dan warna latar belakang).Nama warna yang tersedia adalah:
black
red
green
yellow
blue
,purple
cyan
white
Anda juga dapat menggunakan warna "cerah". Ini bukan kode ANSI standar, dan dukungan untuk ini bervariasi secara liar di berbagai terminal.
light_black
light_red
light_green
light_yellow
light_blue
light_purple
light_cyan
light_white
Kode berikut membuat ColoredFormatter
untuk digunakan dalam pengaturan logging, menggunakan nilai default untuk setiap argumen.
from colorlog import ColoredFormatter
formatter = ColoredFormatter (
"%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s" ,
datefmt = None ,
reset = True ,
log_colors = {
'DEBUG' : 'cyan' ,
'INFO' : 'green' ,
'WARNING' : 'yellow' ,
'ERROR' : 'red' ,
'CRITICAL' : 'red,bg_white' ,
},
secondary_log_colors = {},
style = '%'
)
secondary_log_colors
Warna log sekunder adalah cara untuk memiliki lebih dari satu warna yang dipilih berdasarkan level log. Setiap kunci dalam secondary_log_colors
menambahkan atribut yang dapat digunakan dalam string format ( message
menjadi message_log_color
), dan memiliki nilai yang sesuai yang identik dalam format dengan argumen log_colors
.
Contoh berikut menyoroti nama level menggunakan warna log default, dan menyoroti pesan dengan warna merah untuk error
dan pesan log tingkat critical
.
from colorlog import ColoredFormatter
formatter = ColoredFormatter (
"%(log_color)s%(levelname)-8s%(reset)s %(message_log_color)s%(message)s" ,
secondary_log_colors = {
'message' : {
'ERROR' : 'red' ,
'CRITICAL' : 'red'
}
}
)
dictConfig
logging . config . dictConfig ({
'formatters' : {
'colored' : {
'()' : 'colorlog.ColoredFormatter' ,
'format' : "%(log_color)s%(levelname)-8s%(reset)s %(blue)s%(message)s"
}
}
})
Kamus contoh lengkap dapat ditemukan di tests/test_colorlog.py
.
fileConfig
...
[formatters]
keys =color
[formatter_color]
class =colorlog.ColoredFormatter
format =%(log_color)s%(levelname)-8s%(reset)s %(bg_blue)s[%(name)s]%(reset)s %(message)s from fileConfig
datefmt =%m-%d %H:%M:%S
Sebuah instance dari ColoredFormatter yang dibuat dengan argumen -argumen tersebut kemudian akan digunakan oleh penangan mana pun yang dikonfigurasi untuk menggunakan formatter color
.
Konfigurasi contoh lengkap dapat ditemukan di tests/test_config.ini
.
ColoredFormatter akan bekerja dengan level log khusus yang ditambahkan dengan logging.addLevelName
:
import logging , colorlog
TRACE = 5
logging . addLevelName ( TRACE , 'TRACE' )
formatter = colorlog . ColoredFormatter ( log_colors = { 'TRACE' : 'yellow' })
handler = logging . StreamHandler ()
handler . setFormatter ( formatter )
logger = logging . getLogger ( 'example' )
logger . addHandler ( handler )
logger . setLevel ( 'TRACE' )
logger . log ( TRACE , 'a message using a custom level' )
Tes yang mirip dengan contoh di atas ditemukan dalam tests/test_colorlog.py
.
Colorlog dalam mode pemeliharaan. Saya mencoba dan memastikan perbaikan bug diterbitkan, tetapi kompatibilitas dengan Python 2.6+ dan Python 3+ menjadikan ini basis kode yang sulit untuk menambahkan fitur. Perubahan apa pun yang mungkin memecahkan kompatibilitas ke belakang untuk pengguna yang ada tidak akan dipertimbangkan.
Ada beberapa perpustakaan yang lebih modern untuk meningkatkan logging Python yang mungkin berguna.
GitHub menyediakan daftar proyek yang bergantung pada colorlog.
Beberapa pengadopsi awal termasuk Erbot, Pythran, dan Zenlog.
Hak Cipta (C) 2012-2021 Sam Clements [email protected]
Izin dengan ini diberikan, gratis, kepada siapa pun yang mendapatkan salinan perangkat lunak ini dan file dokumentasi terkait ("Perangkat Lunak"), untuk menangani perangkat lunak tanpa pembatasan, termasuk tanpa batasan hak untuk menggunakan, menyalin, memodifikasi, menggabungkan , menerbitkan, mendistribusikan, sublisense, dan/atau menjual salinan perangkat lunak, dan untuk mengizinkan orang -orang yang dilengkapi dengan perangkat lunak untuk melakukannya, tunduk pada kondisi berikut:
Pemberitahuan hak cipta di atas dan pemberitahuan izin ini harus dimasukkan dalam semua salinan atau bagian substansial dari perangkat lunak.
Perangkat lunak ini disediakan "sebagaimana adanya", tanpa jaminan apa pun, tersurat maupun tersirat, termasuk tetapi tidak terbatas pada jaminan dapat diperjualbelikan, kebugaran untuk tujuan tertentu dan nonpringement. Dalam hal apa pun penulis atau pemegang hak cipta tidak akan bertanggung jawab atas klaim, kerusakan atau tanggung jawab lainnya, baik dalam tindakan kontrak, gugatan atau sebaliknya, timbul dari, di luar atau sehubungan dengan perangkat lunak atau penggunaan atau transaksi lain dalam PERANGKAT LUNAK.