0Pricing
Python Academy · บทเรียน

พื้นฐานโมดูล 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. พื้นฐานโมดูล logging
  2. ตัวจัดการ ตัวจัดรูปแบบ และตัวกรอง
  3. การบันทึกแบบมีโครงสร้าง
  4. การแก้จุดบกพร่องด้วย pdb
← กลับไปที่ Python Academy