0Pricing
Python Academy · Pelajaran

Handler, Formatter, dan Filter

Arahkan output log ke file, stream, dan tujuan kustom.

Handler, Formatter, dan Filter adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Python Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Python Academy mencakup 4 pelajaran total.

Penangan Meneruskan Catatan Log

penangan mengirimkan catatan log ke suatu tujuan: konsol, berkas, titik akhir HTTP, dan sebagainya. Satu logger dapat memiliki beberapa penangan.

import logging

logger = logging.getLogger("myapp")
logger.setLevel(logging.DEBUG)

sh = logging.StreamHandler()
logger.addHandler(sh)

logger.info("Goes to console")

StreamHandler

StreamHandler menulis ke sebuah aliran (bawaan sys.stderr). Teruskan sys.stdout untuk keluaran stdout.

import logging, sys

logger = logging.getLogger("out")
handler = logging.StreamHandler(sys.stdout)
logger.addHandler(handler)
logger.warning("printed to stdout")

FileHandler

FileHandler menambahkan catatan ke sebuah berkas. Gunakan mode="w" untuk menimpa isi pada setiap proses berjalan.

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

Putar berkas log secara otomatis saat ukurannya melebihi batas, dengan menyimpan N berkas cadangan.

from logging.handlers import RotatingFileHandler
import logging

handler = RotatingFileHandler(
    "app.log", maxBytes=1_000_000, backupCount=5
)
logging.getLogger().addHandler(handler)

TimedRotatingFileHandler

Putar berkas log berdasarkan jadwal waktu—harian, mingguan, atau per jam—sehingga ideal untuk layanan yang berjalan lama.

from logging.handlers import TimedRotatingFileHandler
import logging

handler = TimedRotatingFileHandler(
    "app.log", when="midnight", backupCount=7
)
logging.getLogger().addHandler(handler)

Formatter

Formatter mengatur tata letak teks setiap catatan log. Pasangkan dengan penangan menggunakan 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)

Penyaringan Tingkat Penangan

Setiap penangan memiliki tingkatnya sendiri. Catatan harus melewati tingkat logger dan tingkat penangan agar dikeluarkan.

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)

Penyaring Kustom

Buat subkelas logging.Filter dan timpa filter(record) untuk menerima atau menolak catatan berdasarkan kriteria apa pun.

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)

Menambahkan Kolom Tambahan dengan Penyaring

Penyaring juga dapat mengubah catatan untuk menyisipkan kolom tambahan (misalnya, ID permintaan) sebelum pemformatan.

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"

Beberapa Penangan pada Satu Logger

Tambahkan beberapa penangan untuk mengirim catatan log yang sama ke beberapa tujuan secara bersamaan.

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")

Menonaktifkan Propagasi

Atur logger.propagate = False untuk menghentikan catatan naik ke logger akar dan mencegah pencatatan ganda.

import logging

logger = logging.getLogger("mylib")
logger.propagate = False   # stays here, does not reach root
logger.addHandler(logging.StreamHandler())

Pemeriksaan Singkat

Metode apa yang memasangkan Formatter dengan Handler?

Ringkasan

Penangan meneruskan catatan; formatter menatanya; penyaring meneruskan atau memblokirnya secara selektif. Gunakan RotatingFileHandler untuk log dengan batas ukuran dan TimedRotatingFileHandler untuk rotasi berdasarkan tanggal.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Handler, Formatter, dan Filter” gratis?

Ya — teks lengkap “Handler, Formatter, dan Filter” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Python Academy, upgrade ke CoddyKit PRO. Kursus Python Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Handler, Formatter, dan Filter”?

Arahkan output log ke file, stream, dan tujuan kustom. Kamu berlatih Python Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Python Academy?

Tidak diperlukan pengalaman sebelumnya. Python Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “Handler, Formatter, dan Filter” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Python Academy ini?

Ya. Setiap pelajaran Python Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Dasar-Dasar Modul logging
  2. Handler, Formatter, dan Filter
  3. Logging Terstruktur
  4. Debugging dengan pdb
← Kembali ke Python Academy