Yapılandırılmış Günlükleme
Makine tarafından okunabilir çıktı için JSON biçimli günlükler üretin.
Yapılandırılmış Günlükleme, CoddyKit'te ücretsiz bir Python Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Python Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Python Academy kursu toplamda 4 dersten oluşur.
Yapılandırılmış Günlükleme Nedir?
Yapılandırılmış günlükleme, günlük kayıtlarını serbest biçimli metin yerine makine tarafından okunabilen veriler (JSON) olarak üretir; böylece bu kayıtları dizine eklemek, aramak ve bunlar için uyarı oluşturmak kolaylaşır.
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")Özel JSON Biçimlendirici
Düz metin yerine JSON üretmek için logging.Formatter sınıfından türetin.
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
python-json-logger paketi, standart ve ek alanlara sahip kullanıma hazır bir JSON biçimlendirici sağlar.
# 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, bağlam biriktirmeyi biçimlendirmeden ayıran ve işlemci işlem hatlarını destekleyen popüler bir üçüncü taraf kütüphanesidir.
# pip install structlog
import structlog
log = structlog.get_logger()
log = log.bind(request_id="abc123")
log.info("payment_processed", amount=49.99, currency="USD")structlog ile Bağlam Bağlama
structlog, sonraki tüm çağrılarda taşınan anahtar-değer çiftlerini bir günlükleyiciye bağlamanızı sağlar.
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}Zaman Damgaları ve Çağıran Bilgileri Ekleme
İşlemciler kayıtları otomatik olarak zenginleştirebilir. Her günlük kaydına TimeStamper ve CallsiteParameterAdder ekleyin.
import structlog
structlog.configure(
processors=[
structlog.processors.TimeStamper(fmt="iso"),
structlog.processors.CallsiteParameterAdder([structlog.processors.CallsiteParameter.FILENAME]),
structlog.processors.JSONRenderer(),
]
)Web Uygulamalarında İstek Kimliklerini Günlükleme
Bir web çatısında, her isteğin başlangıcında bir istek kimliği bağlayın; böylece o istek sırasında oluşturulan her günlük satırında bu kimlik yer alır.
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 responseECS Günlük Biçimi
Elastic Common Schema (ECS), Elastic Stack tarafından kullanılan standart bir JSON günlük biçimidir. Python için ecs-logging kullanın.
# 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")Günlük Toplama Sistemleri
Yapılandırılmış JSON günlükleri, toplama araçlarına doğal olarak akar: 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 descGünlüklerde PII Kullanımından Kaçınma
Günlüklemeden önce kişisel olarak tanımlanabilir bilgileri temizleyin. E-posta adreslerini, belirteçleri ve parolaları maskelemek için özel bir işlemci veya filtre kullanın.
import re
def mask_pii(_, __, event_dict):
msg = event_dict.get("event", "")
event_dict["event"] = re.sub(
r"[\w.+-]+@[\w-]+\.[\w.]+", "***@***.***", msg
)
return event_dictYapılandırılmış ve Yapılandırılmamış Günlüklerin Dengesi
Yapılandırılmış günlüklerde arama yapılabilir ve uyarı üretilebilir; ancak bu günlükler ayrıntılıdır. Ortam tabanlı yapılandırma kullanarak üretimde yapılandırılmış günlüklemeyi, geliştirme sırasında ise insanların okuyabileceği biçimlendirmeyle birleştirin.
import structlog, os
if os.getenv("ENV") == "production":
renderer = structlog.processors.JSONRenderer()
else:
renderer = structlog.dev.ConsoleRenderer()
structlog.configure(processors=[renderer])Hızlı Kontrol
JSON biçimindeki yapılandırılmış günlüklerin düz metin günlüklerine göre temel avantajı nedir?
Özet
Yapılandırılmış günlükleme, anahtar-değer içeren JSON kayıtları üretir. Bir JSONFormatter, python-json-logger veya structlog kullanın. Her işlemin başlangıcında bağlamı (istek kimliği, kullanıcı) bağlayın; böylece işlem sırasında oluşturulan her günlük satırı bu bağlamı taşır.
Sıkça Sorulan Sorular
“Yapılandırılmış Günlükleme” dersi ücretsiz mi?
Evet — “Yapılandırılmış Günlükleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Python Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Python Academy kursu toplamda 4 dersten oluşur.
“Yapılandırılmış Günlükleme” dersinde ne öğreneceğim?
Makine tarafından okunabilir çıktı için JSON biçimli günlükler üretin. Python Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Python Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Python Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Yapılandırılmış Günlükleme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Python Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Python Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- logging Modülünün Temelleri
- İşleyiciler, Biçimlendiriciler ve Filtreler
- Yapılandırılmış Günlükleme
- pdb ile Hata Ayıklama