Gestructureerde logging
Verstuur JSON-geformatteerde logs voor machineleesbare uitvoer.
Gestructureerde logging is een gratis Python Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Python Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Python Academy bevat in totaal 4 lessen.
Wat is gestructureerde logregistratie?
Gestructureerde logregistratie schrijft logrecords als machinaal leesbare gegevens (JSON) in plaats van vrije tekst, zodat je ze eenvoudig kunt indexeren, doorzoeken en gebruiken om waarschuwingen te activeren.
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")Aangepaste JSON-opmaak
Maak een subklasse van logging.Formatter om JSON uit te geven in plaats van platte tekst.
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
Het pakket python-json-logger biedt kant-en-klare JSON-opmaak met standaard- en extra velden.
# 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 is een populaire bibliotheek van derden die het verzamelen van context scheidt van de opmaak en verwerkingspijplijnen ondersteunt.
# pip install structlog
import structlog
log = structlog.get_logger()
log = log.bind(request_id="abc123")
log.info("payment_processed", amount=49.99, currency="USD")Context binden met structlog
Met structlog kun je sleutel-waardeparen aan een logger binden; die blijven behouden bij alle volgende aanroepen.
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}Tijdstempels en aanroeperinformatie toevoegen
Processors kunnen records automatisch verrijken. Voeg TimeStamper en CallsiteParameterAdder aan elk logrecord toe.
import structlog
structlog.configure(
processors=[
structlog.processors.TimeStamper(fmt="iso"),
structlog.processors.CallsiteParameterAdder([structlog.processors.CallsiteParameter.FILENAME]),
structlog.processors.JSONRenderer(),
]
)Aanvraag-ID's loggen in webapps
Bind in een webframework aan het begin van elke aanvraag een aanvraag-ID, zodat elke logregel tijdens die aanvraag deze bevat.
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-logindeling
Elastic Common Schema (ECS) is een standaardindeling voor JSON-logboeken die door de Elastic Stack wordt gebruikt. Gebruik ecs-logging voor 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")Systemen voor logaggregatie
Gestructureerde JSON-logboeken komen vanzelf terecht in aggregatietools: Elasticsearch/Kibana (ELK), Grafana Loki, Datadog en AWS CloudWatch Logs Insights.
# Loki query example:
# {app="myservice"} | json | level="ERROR"
# CloudWatch Insights:
# fields @timestamp, level, msg
# | filter level = "ERROR"
# | sort @timestamp descPII in logboeken vermijden
Verwijder persoonlijk identificeerbare informatie voordat je logt. Gebruik een aangepaste processor of filter om e-mailadressen, tokens en wachtwoorden af te schermen.
import re
def mask_pii(_, __, event_dict):
msg = event_dict.get("event", "")
event_dict["event"] = re.sub(
r"[\w.+-]+@[\w-]+\.[\w.]+", "***@***.***", msg
)
return event_dictAfwegingen bij gestructureerde en ongestructureerde logregistratie
Gestructureerde logboeken zijn doorzoekbaar en geschikt voor waarschuwingen, maar uitvoerig. Combineer gestructureerde logregistratie in productie met een voor mensen leesbare indeling tijdens de ontwikkeling, met configuratie op basis van de omgeving.
import structlog, os
if os.getenv("ENV") == "production":
renderer = structlog.processors.JSONRenderer()
else:
renderer = structlog.dev.ConsoleRenderer()
structlog.configure(processors=[renderer])Korte controle
Wat is het belangrijkste voordeel van JSON-logboeken ten opzichte van logboeken in platte tekst?
Samenvatting
Gestructureerde logregistratie schrijft JSON-records met sleutel-waardeparen. Gebruik een JSONFormatter, python-json-logger of structlog. Bind context (aanvraag-ID, gebruiker) aan het begin van een bewerking, zodat elke logregel tijdens die bewerking deze context bevat.
Leer Python met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 76
- Lessen
- 320
Veelgestelde vragen
Is de les “Gestructureerde logging” gratis?
Ja — de volledige tekst van “Gestructureerde logging” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Python Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Python Academy bevat in totaal 4 lessen.
Wat leer ik in “Gestructureerde logging”?
Verstuur JSON-geformatteerde logs voor machineleesbare uitvoer. Je oefent met Python Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Python Academy te beginnen?
Ervaring vooraf is niet nodig. Python Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Gestructureerde logging”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Python Academy?
Ja. Elke les over Python Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- Basisprincipes van de module logging
- Handlers, formatters en filters
- Gestructureerde logging
- Debuggen met pdb