0Pricing
Python Academy · Pelajaran

Logging Terstruktur

Keluarkan log berformat JSON agar dapat dibaca mesin.

Logging Terstruktur adalah pelajaran Python Academy gratis di CoddyKit. Ini adalah pelajaran 3 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.

Apa Itu Pencatatan Log Terstruktur?

Pencatatan log terstruktur mengeluarkan catatan log sebagai data yang dapat dibaca mesin (JSON), sehingga mudah diindeks, dicari, dan digunakan untuk membuat peringatan.

import logging, json

def log_json(level, msg, **kw):
    record = {"level": level, "msg": msg, **kw}
    print(json.dumps(record))

log_json("INFO", "Request received", path="/api/users", method="GET")

Formatter JSON Kustom

Buat subkelas logging.Formatter untuk mengeluarkan JSON, bukan teks biasa.

import logging, json

class JSONFormatter(logging.Formatter):
    def format(self, record):
        return json.dumps({
            "time": self.formatTime(record),
            "level": record.levelname,
            "name": record.name,
            "msg": record.getMessage(),
        })

handler = logging.StreamHandler()
handler.setFormatter(JSONFormatter())
logging.getLogger().addHandler(handler)

python-json-logger

Paket python-json-logger menyediakan formatter JSON siap pakai dengan kolom standar dan tambahan.

# pip install python-json-logger
import logging
from pythonjsonlogger import jsonlogger

logger = logging.getLogger()
handler = logging.StreamHandler()
handler.setFormatter(jsonlogger.JsonFormatter())
logger.addHandler(handler)
logger.info("User created", extra={"user_id": 42})

structlog

structlog adalah pustaka pihak ketiga populer yang memisahkan pengumpulan konteks dari pemformatan dan mendukung alur pemroses.

# pip install structlog
import structlog

log = structlog.get_logger()
log = log.bind(request_id="abc123")
log.info("payment_processed", amount=49.99, currency="USD")

Mengikat Konteks dengan structlog

structlog memungkinkan Anda mengikat pasangan kunci-nilai ke logger yang akan terbawa dalam semua pemanggilan berikutnya.

import structlog

log = structlog.get_logger().bind(
    service="auth",
    env="prod"
)
log.warning("login_failed", user="alice", reason="bad_password")
# {service:auth, env:prod, user:alice, reason:bad_password}

Menambahkan Stempel Waktu dan Informasi Pemanggil

Pemroses dapat memperkaya catatan secara otomatis. Tambahkan TimeStamper dan CallsiteParameterAdder ke setiap catatan log.

import structlog

structlog.configure(
    processors=[
        structlog.processors.TimeStamper(fmt="iso"),
        structlog.processors.CallsiteParameterAdder([structlog.processors.CallsiteParameter.FILENAME]),
        structlog.processors.JSONRenderer(),
    ]
)

Mencatat ID Permintaan dalam Aplikasi Web

Dalam kerangka kerja web, ikat ID permintaan di awal setiap permintaan agar setiap baris log selama permintaan tersebut menyertakannya.

import structlog

def middleware(request, call_next):
    req_id = request.headers.get("X-Request-Id", generate_id())
    log = structlog.get_logger().bind(request_id=req_id)
    log.info("request_started", path=request.url.path)
    response = call_next(request)
    log.info("request_finished", status=response.status_code)
    return response

Format Log ECS

Elastic Common Schema (ECS) adalah format log JSON standar yang digunakan oleh Elastic Stack. Gunakan ecs-logging untuk Python.

# pip install ecs-logging
import logging
import ecs_logging

logger = logging.getLogger("app")
handler = logging.StreamHandler()
handler.setFormatter(ecs_logging.StdlibFormatter())
logger.addHandler(handler)
logger.info("Event logged in ECS format")

Sistem Agregasi Log

Log JSON terstruktur mengalir secara alami ke alat agregasi: Elasticsearch/Kibana (ELK), Grafana Loki, Datadog, AWS CloudWatch Logs Insights.

# Loki query example:
# {app="myservice"} | json | level="ERROR"

# CloudWatch Insights:
# fields @timestamp, level, msg
# | filter level = "ERROR"
# | sort @timestamp desc

Menghindari PII dalam Log

Bersihkan informasi identitas pribadi sebelum mencatatnya. Gunakan pemroses atau penyaring kustom untuk menyamarkan email, token, dan kata sandi.

import re

def mask_pii(_, __, event_dict):
    msg = event_dict.get("event", "")
    event_dict["event"] = re.sub(
        r"[\w.+-]+@[\w-]+\.[\w.]+", "***@***.***", msg
    )
    return event_dict

Perbandingan Log Terstruktur dan Tidak Terstruktur

Log terstruktur mudah dicari dan digunakan untuk membuat peringatan, tetapi lebih panjang. Gabungkan pencatatan log terstruktur di lingkungan produksi dengan pemformatan yang mudah dibaca manusia dalam pengembangan menggunakan konfigurasi berbasis lingkungan.

import structlog, os

if os.getenv("ENV") == "production":
    renderer = structlog.processors.JSONRenderer()
else:
    renderer = structlog.dev.ConsoleRenderer()

structlog.configure(processors=[renderer])

Pemeriksaan Singkat

Apa keunggulan utama log berstruktur JSON dibandingkan log teks biasa?

Ringkasan

Pencatatan log terstruktur mengeluarkan catatan JSON kunci-nilai. Gunakan JSONFormatter, python-json-logger, atau structlog. Ikat konteks (ID permintaan, pengguna) di awal suatu operasi agar setiap baris log selama operasi tersebut membawa konteks itu.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Logging Terstruktur” gratis?

Ya — teks lengkap “Logging Terstruktur” 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 “Logging Terstruktur”?

Keluarkan log berformat JSON agar dapat dibaca mesin. 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 3 dari 4.

Berapa lama pelajaran “Logging Terstruktur” 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