Logging Berstruktur
Keluarkan log berformat JSON untuk output yang boleh dibaca mesin.
Logging Berstruktur ialah pelajaran Python Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Python Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Python Academy merangkumi sejumlah 4 pelajaran.
Apakah Pengelogan Berstruktur?
Pengelogan berstruktur menghasilkan rekod pengelogan sebagai data yang boleh dibaca mesin (JSON), bukannya teks bebas, supaya mudah diindeks, dicari dan digunakan untuk amaran.
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")Pemformat JSON Tersuai
Subkelas logging.Formatter untuk menghasilkan JSON dan bukannya 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
Pakej python-json-logger menyediakan pemformat JSON sedia guna dengan medan standard 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 ialah pustaka pihak ketiga yang popular, yang memisahkan pengumpulan konteks daripada pemformatan dan menyokong saluran pemprosesan.
# 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 membolehkan anda mengikat pasangan kunci-nilai pada pengelog supaya pasangan tersebut dibawa melalui semua panggilan seterusnya.
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}Menambah Cap Masa dan Maklumat Pemanggil
Pemproses boleh memperkayakan rekod secara automatik. Tambahkan TimeStamper dan CallsiteParameterAdder pada setiap rekod pengelogan.
import structlog
structlog.configure(
processors=[
structlog.processors.TimeStamper(fmt="iso"),
structlog.processors.CallsiteParameterAdder([structlog.processors.CallsiteParameter.FILENAME]),
structlog.processors.JSONRenderer(),
]
)Mengelog ID Permintaan dalam Aplikasi Web
Dalam rangka kerja web, ikat ID permintaan pada permulaan setiap permintaan supaya setiap baris pengelogan sepanjang permintaan itu 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 responseFormat Pengelogan ECS
Elastic Common Schema (ECS) ialah format pengelogan JSON standard 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 Pengagregatan Pengelogan
Pengelogan JSON berstruktur mengalir dengan mudah ke alat pengagregatan: 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 descMengelakkan PII dalam Pengelogan
Buang maklumat pengenalan peribadi sebelum mengelog. Gunakan pemproses atau penapis tersuai untuk menyamarkan e-mel, token dan kata laluan.
import re
def mask_pii(_, __, event_dict):
msg = event_dict.get("event", "")
event_dict["event"] = re.sub(
r"[\w.+-]+@[\w-]+\.[\w.]+", "***@***.***", msg
)
return event_dictPertukaran antara Pengelogan Berstruktur dan Tidak Berstruktur
Pengelogan berstruktur boleh dicari dan digunakan untuk amaran tetapi panjang. Gabungkan pengelogan berstruktur dalam pengeluaran dengan pemformatan yang boleh dibaca manusia dalam pembangunan menggunakan konfigurasi berasaskan persekitaran.
import structlog, os
if os.getenv("ENV") == "production":
renderer = structlog.processors.JSONRenderer()
else:
renderer = structlog.dev.ConsoleRenderer()
structlog.configure(processors=[renderer])Semakan Pantas
Apakah kelebihan utama pengelogan berstruktur JSON berbanding pengelogan teks biasa?
Imbas Kembali
Pengelogan berstruktur menghasilkan rekod JSON kunci-nilai. Gunakan JSONFormatter, python-json-logger atau structlog. Ikat konteks (ID permintaan, pengguna) pada permulaan operasi supaya setiap baris pengelogan sepanjang operasi itu membawa konteks tersebut.
Pelajari Python dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 76
- Pelajaran
- 320
Soalan Lazim
Adakah pelajaran “Logging Berstruktur” percuma?
Ya — teks penuh “Logging Berstruktur” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Python Academy, tingkat taraf kepada CoddyKit PRO. Kursus Python Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Logging Berstruktur”?
Keluarkan log berformat JSON untuk output yang boleh dibaca mesin. Anda berlatih Python Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Python Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Python Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Logging Berstruktur” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Python Academy ini?
Ya. Setiap pelajaran Python Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.