พื้นฐานโมดูล logging
กำหนดค่าเครื่องบันทึก ตั้งระดับ และส่งข้อความอย่างเหมาะสม
พื้นฐานโมดูล logging เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดจึงเลือกการบันทึกข้อมูลแทนการพิมพ์ผลลัพธ์
โมดูล logging มีระดับความรุนแรง ปลายทางเอาต์พุตที่กำหนดค่าได้ การประทับเวลา และความสามารถในการปิดเอาต์พุตโดยไม่ต้องแก้ไขโค้ด
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")ระดับการบันทึกข้อมูล
Python กำหนดระดับมาตรฐานห้าระดับโดยเรียงตามความรุนแรงที่เพิ่มขึ้น ได้แก่ DEBUG, INFO, WARNING, ERROR, CRITICAL ระบบจะส่งออกเฉพาะข้อความที่อยู่ในระดับเดียวกันหรือสูงกว่าระดับที่กำหนดค่าไว้
import logging
# Numeric values:
# DEBUG = 10
# INFO = 20
# WARNING = 30
# ERROR = 40
# CRITICAL = 50
logging.basicConfig(level=logging.WARNING)
logging.debug("hidden") # not shown
logging.warning("shown") # shownการเรียกใช้ตัวบันทึก
ใช้ logging.getLogger(__name__) ในทุกโมดูล วิธีนี้จะสร้างลำดับชั้นที่สอดคล้องกับโครงสร้างโมดูล
import logging
logger = logging.getLogger(__name__)
def process(data):
logger.info("Processing %d items", len(data))
return [x * 2 for x in data]ตัวเลือก basicConfig
basicConfig ช่วยกำหนดค่าตัวบันทึกรากได้อย่างรวดเร็ว อาร์กิวเมนต์คีย์เวิร์ดที่ใช้บ่อย ได้แก่ level, format, filename และ filemode
import logging
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s %(levelname)s %(name)s — %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)ฟิลด์รูปแบบบันทึกข้อมูล
ฟิลด์รูปแบบสำคัญ ได้แก่ %(levelname)s, %(name)s, %(message)s, %(asctime)s, %(filename)s และ %(lineno)d
import logging
fmt = "%(asctime)s | %(levelname)-8s | %(name)s:%(lineno)d | %(message)s"
logging.basicConfig(level=logging.DEBUG, format=fmt)
logging.info("Server started on port 8080")การบันทึกข้อยกเว้น
ใช้ logger.exception() ภายในบล็อก except เพื่อบันทึกข้อความ AND การติดตามย้อนกลับทั้งหมด
import logging
logger = logging.getLogger(__name__)
try:
1 / 0
except ZeroDivisionError:
logger.exception("Division failed")
# Logs message + traceback automaticallyบริบทเพิ่มเติมด้วย extra=
ส่ง dict เป็น extra= เพื่อเพิ่มฟิลด์ที่กำหนดเองลงในระเบียนบันทึก
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(
format="%(asctime)s %(levelname)s [%(user)s] %(message)s"
)
logger.info("Login successful", extra={"user": "alice"})การจัดรูปแบบสตริงแบบประเมินเมื่อจำเป็น
ส่งอาร์กิวเมนต์รูปแบบแยกกัน — อย่าจัดรูปแบบสตริงไว้ล่วงหน้า วิธีนี้จะหลีกเลี่ยงต้นทุนการสร้างสตริงเมื่อข้อความถูกกรองออก
import logging
logger = logging.getLogger(__name__)
# BAD (always builds the string):
logger.debug(f"Processing {len(data)} items")
# GOOD (only builds if DEBUG is enabled):
logger.debug("Processing %d items", len(data))การปิดการบันทึกข้อมูล
เรียกใช้ logging.disable(level) เพื่อระงับข้อความทั้งหมดจนถึงระดับนั้นทั่วทั้งระบบ ซึ่งมีประโยชน์ในการทดสอบ
import logging
logging.disable(logging.CRITICAL) # suppress everything
# All log calls now silently do nothing
logging.disable(logging.NOTSET) # re-enableลำดับชั้นของตัวบันทึก
ชื่อของตัวบันทึกใช้จุดเป็นตัวคั่น ตัวบันทึกลูกจะส่งต่อระเบียนไปยังตัวบันทึกแม่ เว้นแต่ propagate=False
import logging
parent = logging.getLogger("myapp")
child = logging.getLogger("myapp.database")
# child propagates to parent by default
child.warning("DB slow") # also appears in myapp's handlersตัวบันทึกราก
ตัวบันทึกราก (จาก logging.warning() และอื่น ๆ) เป็นบรรพบุรุษของตัวบันทึกทั้งหมด กำหนดค่าได้ด้วย basicConfig หรือเพิ่มตัวจัดการโดยตรง
import logging
root = logging.getLogger() # root logger
root.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
root.addHandler(handler)ตรวจสอบอย่างรวดเร็ว
คุณควรใช้เมธอดการบันทึกข้อมูลใดภายในบล็อก except เพื่อรวมการติดตามย้อนกลับทั้งหมดโดยอัตโนมัติ
สรุปทบทวน
ใช้ตัวบันทึกที่มีชื่อด้วย getLogger(__name__) กำหนดค่าผ่าน basicConfig ส่งอาร์กิวเมนต์รูปแบบแบบประเมินเมื่อจำเป็น และใช้ logger.exception() สำหรับการติดตามย้อนกลับของข้อผิดพลาด ตัวบันทึกก่อตัวเป็นลำดับชั้นที่มีตัวบันทึกรากเป็นราก
คำถามที่พบบ่อย
บทเรียน “พื้นฐานโมดูล logging” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “พื้นฐานโมดูล logging” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “พื้นฐานโมดูล logging”
กำหนดค่าเครื่องบันทึก ตั้งระดับ และส่งข้อความอย่างเหมาะสม คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “พื้นฐานโมดูล logging” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐานโมดูล logging
- ตัวจัดการ ตัวจัดรูปแบบ และตัวกรอง
- การบันทึกแบบมีโครงสร้าง
- การแก้จุดบกพร่องด้วย pdb