Best practices voor gestructureerde logging
Implementeer gestructureerde logging voor eenvoudiger parsen en analyseren en sneller debuggen van productieproblemen
Best practices voor gestructureerde logging is een gratis Draaiboek voor debuggen in productie en incidentrespons-les op CoddyKit. Dit is les 1 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Draaiboek voor debuggen in productie en incidentrespons. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Draaiboek voor debuggen in productie en incidentrespons bevat in totaal 4 lessen.
Wat zijn logboeken?
Logboeken zijn registraties van gebeurtenissen die in je applicatie of systeem plaatsvinden. Zie ze als een dagboek voor je software!
Ze zijn cruciaal om te begrijpen wat je programma doet, vooral wanneer er iets misgaat in een liveomgeving voor 'productie'.
De rommelige werkelijkheid
Logboeken zijn vaak gewoon tekstregels. Dit heet ongestructureerd loggen. Hoewel dit eenvoudig te schrijven is, zijn ongestructureerde logboeken moeilijk door computers te lezen en analyseren, waardoor foutopsporing een langzaam, handmatig proces wordt.
Bekijk dit voorbeeld:
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
def process_order(order_id, item_count):
logger.info(f"Processing order {order_id} with {item_count} items.")
if item_count > 10:
logger.warning(f"Large order detected for {order_id}. Items: {item_count}.")
logger.info(f"Order {order_id} processed successfully.")
if __name__ == "__main__":
process_order("ORD-123", 5)
process_order("ORD-456", 12)Wat is gestructureerd loggen?
Bij gestructureerd loggen worden je logboeken opgemaakt als machineleesbare gegevens, niet als vrije tekst. JSON is het meest gebruikte formaat.
In plaats van één tekstregel is elke logboekingang een object met sleutel-waardeparen. Daardoor zijn ze eenvoudig programmatisch te zoeken, filteren en analyseren.
Waarom gestructureerd loggen geweldig is
Gestructureerde logboeken bieden veel voordelen:
- Snellere foutopsporing: Relevante gebeurtenissen snel vinden.
- Betere analyse: Gegevens eenvoudig opvragen en samenvoegen.
- Geautomatiseerde hulpmiddelen: Integreren met systemen voor monitoring en waarschuwingen.
- Consistentie: Ervoor zorgen dat alle logboeken de verwachte velden bevatten.
JSON is de standaard
Hoewel er andere formaten bestaan, is JSON (JavaScript Object Notation) vanwege de eenvoud en brede ondersteuning de populairste keuze voor gestructureerd loggen.
Een JSON-logboekingang is een zelfstandig object, waardoor het bijzonder veelzijdig is voor het opslaan van uiteenlopende gegevens. Zo kan een gestructureerd logboek eruitzien:
{
"timestamp": "2023-10-27T10:30:00Z",
"level": "INFO",
"service": "order-processor",
"message": "Order processed successfully",
"order_id": "ORD-123",
"item_count": 5
}Aan de slag met code!
Laten we bekijken hoe je gestructureerd loggen implementeert. Veel programmeertalen hebben bibliotheken die dit eenvoudig maken. Hier is een eenvoudig Python-voorbeeld met de standaardmodule logging en een aangepaste JSON-opmaker.
import logging
import json
class JsonFormatter(logging.Formatter):
def format(self, record):
log_entry = {
"timestamp": self.formatTime(record, self.datefmt),
"level": record.levelname,
"name": record.name,
"message": record.getMessage(),
"file": record.filename,
"line": record.lineno
}
if hasattr(record, 'order_id'):
log_entry['order_id'] = record.order_id
if hasattr(record, 'item_count'):
log_entry['item_count'] = record.item_count
return json.dumps(log_entry)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
handler.setFormatter(JsonFormatter())
logger.addHandler(handler)
def process_order(order_id, item_count):
extra_data = {'order_id': order_id, 'item_count': item_count}
logger.info("Processing order", extra=extra_data)
if item_count > 10:
logger.warning("Large order detected", extra=extra_data)
logger.info("Order processed successfully", extra=extra_data)
if __name__ == "__main__":
process_order("ORD-123", 5)
process_order("ORD-456", 12)Onmisbare velden
Elke gestructureerde logboekingang moet deze kernvelden bevatten voor effectieve analyse:
timestamp: Wanneer de gebeurtenis plaatsvond (ISO 8601-indeling).level: Ernst (INFO, WARN, ERROR, DEBUG).service: Welke dienst of applicatie het logboek heeft gegenereerd.message: Een voor mensen leesbare samenvatting van de gebeurtenis.hostname/pod_name: Waar het logboek is ontstaan.
Verrijk je logboeken
Voeg naast de essentiële velden contextuele gegevens toe die specifiek zijn voor de gebeurtenis. Dit is belangrijk om aanvragen door gedistribueerde systemen heen te volgen, zodat je bij het opsporen van complexe problemen de verbanden kunt leggen.
request_id: Om één gebruikersaanvraag te volgen.user_id: Om de betrokken gebruiker te identificeren.transaction_id: Voor specifieke bedrijfstransacties.
import logging
import json
import uuid
# Reusing the JsonFormatter from previous scene
class JsonFormatter(logging.Formatter):
def format(self, record):
log_entry = {
"timestamp": self.formatTime(record, self.datefmt),
"level": record.levelname,
"message": record.getMessage()
}
for key, value in record.__dict__.items():
if not key.startswith('_') and key not in ['name', 'levelname', 'pathname', 'filename', 'module', 'exc_info', 'exc_text', 'stack_info', 'lineno', 'funcName', 'created', 'msecs', 'relativeCreated', 'thread', 'threadName', 'processName', 'process', 'args', 'msg', 'asctime']:
log_entry[key] = value
return json.dumps(log_entry)
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
handler = logging.StreamHandler()
handler.setFormatter(JsonFormatter())
logger.addHandler(handler)
def handle_web_request(user_id):
request_id = str(uuid.uuid4())[:8]
extra_data = {'request_id': request_id, 'user_id': user_id, 'service': 'api-gateway'}
logger.info("Received web request", extra=extra_data)
if user_id == "user-vip":
logger.info("VIP user request detected", extra=extra_data)
else:
logger.debug("Standard user request", extra=extra_data)
logger.info("Request processed", extra=extra_data)
if __name__ == "__main__":
handle_web_request("user-123")
handle_web_request("user-vip")Logniveaus
Met logniveaus kun je de ernst en het belang van een logbericht categoriseren. Veelgebruikte niveaus zijn:
- DEBUG: Gedetailleerde informatie die alleen nuttig is bij het vaststellen van problemen.
- INFO: Bevestiging dat alles werkt zoals verwacht.
- WARN: Een onverwachte gebeurtenis, terwijl de applicatie nog steeds actief is.
- ERROR: Een fout waardoor bepaalde functionaliteit niet werkt.
- CRITICAL: Een ernstige fout waardoor de applicatie mogelijk niet kan doorgaan.
Korte toets
Gestructureerd loggen is een krachtige techniek om de waarneembaarheid te verbeteren. Laten we testen of je de belangrijkste voordelen ervan begrijpt.
Samenvatting: gestructureerd loggen
Je hebt geleerd hoe krachtig gestructureerd loggen is! Door je logboeken op te maken als machineleesbare gegevens, zoals JSON, krijg je snellere foutopsporing, betere analyse en naadloze integratie met monitoringhulpmiddelen.
Vergeet niet essentiële velden en contextuele gegevens toe te voegen, zodat je logboeken echt nuttig zijn voor het vaststellen van problemen in productie.
Leer Draaiboek voor debuggen in productie en incidentrespons 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
- 12
- Lessen
- 48
Veelgestelde vragen
Is de les “Best practices voor gestructureerde logging” gratis?
Ja — je kunt hier op het web alle 3 lessen van het leerpad Draaiboek voor debuggen in productie en incidentrespons, waaronder “Best practices voor gestructureerde logging”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Draaiboek voor debuggen in productie en incidentrespons bevat in totaal 4 lessen.
Wat leer ik in “Best practices voor gestructureerde logging”?
Implementeer gestructureerde logging voor eenvoudiger parsen en analyseren en sneller debuggen van productieproblemen Je oefent met Draaiboek voor debuggen in productie en incidentrespons 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 Draaiboek voor debuggen in productie en incidentrespons te beginnen?
Ervaring vooraf is niet nodig. Draaiboek voor debuggen in productie en incidentrespons 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 1 van 4.
Hoe lang duurt de les “Best practices voor 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 Draaiboek voor debuggen in productie en incidentrespons?
Ja. Elke les over Draaiboek voor debuggen in productie en incidentrespons 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
- Best practices voor gestructureerde logging
- Metrics, dashboards en observability
- Slimme strategieën voor alerting ontwerpen
- Strategieën voor logaggregatie en bewaartermijnen