ตัวจัดการ ตัวจัดรูปแบบ และตัวกรอง
กำหนดเส้นทางผลลัพธ์การบันทึกไปยังไฟล์ สตรีม และปลายทางแบบกำหนดเอง
ตัวจัดการ ตัวจัดรูปแบบ และตัวกรอง เป็นบทเรียน Python Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Python Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
ตัวจัดการกำหนดเส้นทางระเบียนบันทึก
ตัวจัดการจะส่งระเบียนบันทึกไปยังปลายทาง เช่น คอนโซล ไฟล์ จุดปลายทาง HTTP และอื่น ๆ ตัวบันทึกหนึ่งตัวสามารถมีตัวจัดการหลายตัวได้
import logging
logger = logging.getLogger("myapp")
logger.setLevel(logging.DEBUG)
sh = logging.StreamHandler()
logger.addHandler(sh)
logger.info("Goes to console")StreamHandler
StreamHandler จะเขียนลงในสตรีม (ค่าเริ่มต้นคือ sys.stderr) ส่ง sys.stdout เพื่อส่งเอาต์พุตไปยัง stdout
import logging, sys
logger = logging.getLogger("out")
handler = logging.StreamHandler(sys.stdout)
logger.addHandler(handler)
logger.warning("printed to stdout")FileHandler
FileHandler จะเพิ่มระเบียนต่อท้ายไฟล์ ใช้ mode="w" เพื่อเขียนทับทุกครั้งที่เรียกใช้
import logging
logging.basicConfig(
filename="app.log",
filemode="a",
level=logging.INFO,
format="%(asctime)s %(levelname)s %(message)s"
)
logging.info("Persisted to disk")RotatingFileHandler
หมุนเวียนไฟล์บันทึกโดยอัตโนมัติเมื่อมีขนาดเกินขีดจำกัด พร้อมเก็บไฟล์สำรองไว้ N ไฟล์
from logging.handlers import RotatingFileHandler
import logging
handler = RotatingFileHandler(
"app.log", maxBytes=1_000_000, backupCount=5
)
logging.getLogger().addHandler(handler)TimedRotatingFileHandler
หมุนเวียนไฟล์บันทึกตามกำหนดเวลา — รายวัน รายสัปดาห์ หรือรายชั่วโมง — เหมาะสำหรับบริการที่ทำงานต่อเนื่องเป็นเวลานาน
from logging.handlers import TimedRotatingFileHandler
import logging
handler = TimedRotatingFileHandler(
"app.log", when="midnight", backupCount=7
)
logging.getLogger().addHandler(handler)ตัวจัดรูปแบบ
Formatter ควบคุมเค้าโครงข้อความของระเบียนบันทึกแต่ละรายการ แนบเข้ากับตัวจัดการด้วย handler.setFormatter()
import logging
fmt = logging.Formatter(
fmt="%(asctime)s %(levelname)-8s %(name)s — %(message)s",
datefmt="%Y-%m-%dT%H:%M:%S"
)
handler = logging.StreamHandler()
handler.setFormatter(fmt)
logging.getLogger().addHandler(handler)การกรองระดับตัวจัดการ
ตัวจัดการแต่ละตัวมีระดับของตนเอง ระเบียนจะถูกส่งออกได้ก็ต่อเมื่อผ่านทั้งระดับของตัวบันทึกและระดับของตัวจัดการ
import logging
logger = logging.getLogger("app")
logger.setLevel(logging.DEBUG) # logger passes DEBUG+
err_handler = logging.FileHandler("errors.log")
err_handler.setLevel(logging.ERROR) # only ERROR+
logger.addHandler(err_handler)ตัวกรองแบบกำหนดเอง
สร้างคลาสย่อยของ logging.Filter และเขียนทับ filter(record) เพื่อยอมรับหรือปฏิเสธระเบียนตามเกณฑ์ใดก็ได้
import logging
class SensitiveFilter(logging.Filter):
def filter(self, record):
return "password" not in record.getMessage().lower()
handler = logging.StreamHandler()
handler.addFilter(SensitiveFilter())
logging.getLogger().addHandler(handler)การเพิ่มฟิลด์พิเศษด้วยตัวกรอง
ตัวกรองยังสามารถเปลี่ยนแปลงระเบียนเพื่อแทรกฟิลด์เพิ่มเติมได้ เช่น รหัสคำขอ ก่อนการจัดรูปแบบ
import logging
class RequestIDFilter(logging.Filter):
def __init__(self, request_id):
self.request_id = request_id
def filter(self, record):
record.request_id = self.request_id
return True
# fmt: "%(request_id)s %(message)s"ตัวจัดการหลายตัวในตัวบันทึกเดียว
เพิ่มตัวจัดการหลายตัวเพื่อส่งระเบียนบันทึกเดียวกันไปยังปลายทางหลายแห่งพร้อมกัน
import logging
logger = logging.getLogger("multi")
logger.addHandler(logging.StreamHandler()) # console
logger.addHandler(logging.FileHandler("audit.log")) # file
logger.setLevel(logging.INFO)
logger.info("Both destinations receive this")การปิดการส่งต่อ
ตั้งค่า logger.propagate = False เพื่อหยุดไม่ให้ระเบียนไหลขึ้นไปยังตัวบันทึกรากและถูกบันทึกซ้ำ
import logging
logger = logging.getLogger("mylib")
logger.propagate = False # stays here, does not reach root
logger.addHandler(logging.StreamHandler())ตรวจสอบอย่างรวดเร็ว
เมธอดใดใช้แนบ Formatter เข้ากับ Handler
สรุปทบทวน
ตัวจัดการกำหนดเส้นทางระเบียน ตัวจัดรูปแบบกำหนดรูปแบบ และตัวกรองคัดเลือกว่าจะส่งผ่านหรือบล็อกระเบียน ใช้ RotatingFileHandler สำหรับบันทึกที่จำกัดด้วยขนาด และ TimedRotatingFileHandler สำหรับการหมุนเวียนตามวันที่
คำถามที่พบบ่อย
บทเรียน “ตัวจัดการ ตัวจัดรูปแบบ และตัวกรอง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “ตัวจัดการ ตัวจัดรูปแบบ และตัวกรอง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Python Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Python Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “ตัวจัดการ ตัวจัดรูปแบบ และตัวกรอง”
กำหนดเส้นทางผลลัพธ์การบันทึกไปยังไฟล์ สตรีม และปลายทางแบบกำหนดเอง คุณปฏิบัติ Python Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Python Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Python Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “ตัวจัดการ ตัวจัดรูปแบบ และตัวกรอง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Python Academy นี้ได้ไหม
ได้ บทเรียน Python Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐานโมดูล logging
- ตัวจัดการ ตัวจัดรูปแบบ และตัวกรอง
- การบันทึกแบบมีโครงสร้าง
- การแก้จุดบกพร่องด้วย pdb