เพิ่มสีให้กับเอาต์พุตของโมดูล logging
ของ Python
ปัจจุบัน Colorlog ต้องการ Python 3.6 หรือสูงกว่า รุ่นเก่า (ต่ำกว่า 5.xx) รองรับ Python 2.6 ขึ้นไป
Colorama รวมอยู่ในการพึ่งพาที่ต้องการและเริ่มต้นเมื่อใช้ colorlog บน windows
ห้องสมุดนี้มีอายุมากกว่าทศวรรษและสนับสนุนชุด Python ที่กว้างตลอดชีวิตซึ่งทำให้เป็นห้องสมุดที่ยากที่จะเพิ่มคุณสมบัติใหม่ให้ Colorlog 6 อาจแบ่งความเข้ากันได้ย้อนหลังเพื่อให้สามารถเพิ่มคุณสมบัติใหม่ได้ง่ายขึ้น แต่อาจยังไม่ยอมรับการเปลี่ยนแปลงหรือคำขอคุณสมบัติทั้งหมด Colorlog 4 อาจยอมรับข้อบกพร่องที่จำเป็น แต่ไม่ควรได้รับการพิจารณาอย่างแข็งขันและจะไม่ยอมรับการเปลี่ยนแปลงที่สำคัญหรือคุณสมบัติใหม่
ติดตั้งจาก pypi ด้วย:
pip install colorlog
การแจกแจง Linux หลายแห่งให้แพ็คเกจอย่างเป็นทางการ (Debian, Arch, Fedora, Gentoo, OpenSuse และ Ubuntu) และอื่น ๆ ได้ให้ผู้ใช้จัดเตรียมแพ็คเกจ (พอร์ต 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 )
คลาส ColoredFormatter
ใช้ข้อโต้แย้งหลายประการ:
format
: สตริงรูปแบบที่ใช้ในการส่งออกข้อความ (จำเป็น)datefmt
: รูปแบบวันที่เสริมส่งผ่านไปยังคลาสฐาน ดู logging.Formatter
reset
: เพิ่มรหัสรีเซ็ตสีโดยนัยในเอาต์พุตข้อความเว้นแต่ว่าเอาต์พุตจะจบลงด้วยหนึ่ง ค่าเริ่มต้นเป็น True
log_colors
: การแมปของชื่อระดับบันทึกเป็นชื่อสี ค่าเริ่มต้นสามารถพบได้ใน colorlog.default_log_colors
หรือตัวอย่างด้านล่างsecondary_log_colors
: การแมปของชื่อกับการแมปสไตล์ log_colors
กำหนดสีเพิ่มเติมที่สามารถใช้ในสตริงรูปแบบ ดูตัวอย่างด้านล่างstyle
: มีให้ใน Python 3.2 ขึ้นไป ดู logging.Formatter
รหัสหลบหนีสีสามารถเลือกได้ตามระดับบันทึกบันทึกโดยการเพิ่มพารามิเตอร์ลงในสตริงรูปแบบ:
log_color
: ส่งคืนสีที่เกี่ยวข้องกับระดับบันทึก<name>_log_color
: ส่งคืนสีอื่นตามระดับบันทึกหากรูปแบบมีการกำหนดค่าสีรอง (ดูที่ secondary_log_colors
ด้านล่าง) สามารถใช้รหัสหลบหนีได้หลายรหัสในครั้งเดียวโดยการเข้าร่วมกับเครื่องหมายจุลภาคเมื่อกำหนดค่าสีสำหรับระดับบันทึก (แต่ไม่สามารถใช้โดยตรงในสตริงรูปแบบ) ตัวอย่างเช่น black,bg_white
จะใช้รหัสหลบหนีสำหรับข้อความสีดำบนพื้นหลังสีขาว
รหัสหลบหนีต่อไปนี้มีให้ใช้ในสตริงรูปแบบ:
{color}
, fg_{color}
, bg_{color}
: สีหน้าและสีพื้นหลังbold
, bold_{color}
, fg_bold_{color}
, bg_bold_{color}
: สีตัวหนา/สดใสthin
, thin_{color}
, fg_thin_{color}
: สีบาง (ขึ้นอยู่กับเทอร์มินัล)reset
: ล้างการจัดรูปแบบทั้งหมด (ทั้งสีหน้าและสีพื้นหลัง)ชื่อสีที่มีอยู่คือ:
black
red
green
yellow
blue
,purple
cyan
white
คุณยังสามารถใช้สี "สดใส" สิ่งเหล่านี้ไม่ใช่รหัส ANSI มาตรฐานและการสนับสนุนสำหรับสิ่งเหล่านี้แตกต่างกันไปตามขั้วที่แตกต่างกัน
light_black
light_red
light_green
light_yellow
light_blue
light_purple
light_cyan
light_white
รหัสต่อไปนี้สร้าง ColoredFormatter
สำหรับใช้ในการตั้งค่าการบันทึกโดยใช้ค่าเริ่มต้นสำหรับแต่ละอาร์กิวเมนต์
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
สีบันทึกรองเป็นวิธีที่จะมีมากกว่าหนึ่งสีที่เลือกตามระดับบันทึก แต่ละคีย์ใน secondary_log_colors
เพิ่มแอตทริบิวต์ที่สามารถใช้ในสตริงรูปแบบ ( message
กลายเป็น message_log_color
) และมีค่าที่สอดคล้องกันซึ่งเหมือนกันในรูปแบบของอาร์กิวเมนต์ log_colors
ตัวอย่างต่อไปนี้เน้นชื่อระดับโดยใช้สีบันทึกเริ่มต้นและเน้นข้อความเป็นสีแดงสำหรับ error
และข้อความบันทึกระดับ 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"
}
}
})
ตัวอย่างพจนานุกรมแบบเต็มสามารถพบได้ใน 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
อินสแตนซ์ของ ColoredFormatter ที่สร้างขึ้นด้วยอาร์กิวเมนต์เหล่านั้นจะถูกใช้โดยตัวจัดการใด ๆ ที่กำหนดค่าให้ใช้ตัวฟอร์แมต color
การกำหนดค่าตัวอย่างเต็มสามารถพบได้ใน tests/test_config.ini
ColoredFormatter จะทำงานร่วมกับระดับบันทึกที่กำหนดเองที่เพิ่มเข้ามาพร้อมกับ 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' )
การทดสอบที่คล้ายกับตัวอย่างข้างต้นพบได้ใน tests/test_colorlog.py
Colorlog อยู่ในโหมดการบำรุงรักษา ฉันพยายามและตรวจสอบให้แน่ใจว่าแก้ไขข้อผิดพลาด แต่ความเข้ากันได้กับ Python 2.6+ และ Python 3+ ทำให้นี่เป็นรหัสฐานที่ยากในการเพิ่มคุณสมบัติ การเปลี่ยนแปลงใด ๆ ที่อาจทำลายความเข้ากันได้ย้อนหลังสำหรับผู้ใช้ที่มีอยู่จะไม่ได้รับการพิจารณา
มีห้องสมุดที่ทันสมัยกว่าสำหรับการปรับปรุงการบันทึกงูหลามที่คุณอาจพบว่ามีประโยชน์
GitHub จัดทำรายการโครงการที่ขึ้นอยู่กับ colorlog
ผู้ใช้งานบางคนรวมถึง Errbot, Pythran และ Zenlog
ลิขสิทธิ์ (c) 2012-2021 Sam Clements [email protected]
ได้รับอนุญาตโดยไม่เสียค่าใช้จ่ายสำหรับบุคคลใด ๆ ที่ได้รับสำเนาซอฟต์แวร์นี้และไฟล์เอกสารที่เกี่ยวข้อง ("ซอฟต์แวร์") เพื่อจัดการในซอฟต์แวร์โดยไม่มีการ จำกัด รวมถึง แต่ไม่ จำกัด เฉพาะสิทธิ์ในการใช้คัดลอกแก้ไขผสาน เผยแพร่แจกจ่าย sublicense และ/หรือขายสำเนาของซอฟต์แวร์และอนุญาตให้บุคคลที่ซอฟต์แวร์ได้รับการตกแต่งให้ทำเช่นนั้นภายใต้เงื่อนไขดังต่อไปนี้:
ประกาศลิขสิทธิ์ข้างต้นและการแจ้งเตือนการอนุญาตนี้จะรวมอยู่ในสำเนาทั้งหมดหรือส่วนสำคัญของซอฟต์แวร์
ซอฟต์แวร์มีให้ "ตามสภาพ" โดยไม่มีการรับประกันใด ๆ ไม่ว่าโดยชัดแจ้งหรือโดยนัยรวมถึง แต่ไม่ จำกัด เฉพาะการรับประกันความสามารถในการค้าการออกกำลังกายสำหรับวัตถุประสงค์เฉพาะและการไม่เข้าร่วม ไม่ว่าในกรณีใดผู้เขียนหรือผู้ถือลิขสิทธิ์จะต้องรับผิดชอบต่อการเรียกร้องความเสียหายหรือความรับผิดอื่น ๆ ไม่ว่าจะเป็นการกระทำของสัญญาการละเมิดหรืออื่น ๆ ซอฟต์แวร์.