Strukturerad loggning
Generera JSON-formaterade loggar för maskinläsbara utdata.
Strukturerad loggning är en gratis lektion i Python Academy på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Python Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Python Academy innehåller totalt 4 lektioner.
Vad är strukturerad loggning?
Strukturerad loggning skickar loggposter som maskinläsbara data (JSON) i stället för fri text, vilket gör dem enkla att indexera, söka i och skapa aviseringar från.
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")Anpassad JSON-formaterare
Skapa en subklass av logging.Formatter för att skicka JSON i stället för vanlig text.
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
Paketet python-json-logger tillhandahåller en färdig JSON-formaterare med standardfält och extra fält.
# 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 är ett populärt tredjepartsbibliotek som separerar insamling av kontext från formatering och stöder processor-pipelines.
# pip install structlog
import structlog
log = structlog.get_logger()
log = log.bind(request_id="abc123")
log.info("payment_processed", amount=49.99, currency="USD")Binda kontext med structlog
structlog låter dig binda nyckel-värde-par till en logger, så att de följer med i alla efterföljande anrop.
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}Lägga till tidsstämplar och anroparinformation
Processorer kan automatiskt berika poster. Lägg till TimeStamper och CallsiteParameterAdder i varje loggpost.
import structlog
structlog.configure(
processors=[
structlog.processors.TimeStamper(fmt="iso"),
structlog.processors.CallsiteParameterAdder([structlog.processors.CallsiteParameter.FILENAME]),
structlog.processors.JSONRenderer(),
]
)Logga request-ID:n i webbappar
I ett webbramverk binder du ett request-ID i början av varje begäran, så att varje loggrad under begäran innehåller det.
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-loggformat
Elastic Common Schema (ECS) är ett standardiserat JSON-loggformat som används av Elastic Stack. Använd ecs-logging för 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")System för loggaggregering
Strukturerade JSON-loggar flödar naturligt in i aggregeringsverktyg: Elasticsearch/Kibana (ELK), Grafana Loki, Datadog och AWS CloudWatch Logs Insights.
# Loki query example:
# {app="myservice"} | json | level="ERROR"
# CloudWatch Insights:
# fields @timestamp, level, msg
# | filter level = "ERROR"
# | sort @timestamp descUndvika PII i loggar
Rensa bort personligt identifierbar information innan den loggas. Använd en anpassad processor eller ett filter för att maskera e-postadresser, tokens och lösenord.
import re
def mask_pii(_, __, event_dict):
msg = event_dict.get("event", "")
event_dict["event"] = re.sub(
r"[\w.+-]+@[\w-]+\.[\w.]+", "***@***.***", msg
)
return event_dictAvvägningar mellan strukturerade och ostrukturerade loggar
Strukturerade loggar är sökbara och kan användas för aviseringar, men är utförliga. Kombinera strukturerad loggning i produktion med människoläsbar formatering under utveckling genom miljöbaserad konfiguration.
import structlog, os
if os.getenv("ENV") == "production":
renderer = structlog.processors.JSONRenderer()
else:
renderer = structlog.dev.ConsoleRenderer()
structlog.configure(processors=[renderer])Snabbkontroll
Vilken är den främsta fördelen med JSON-strukturerade loggar jämfört med loggar i vanlig text?
Sammanfattning
Strukturerad loggning skickar JSON-poster med nyckel-värde-par. Använd en JSONFormatter, python-json-logger eller structlog. Bind kontext (request-ID, användare) i början av en åtgärd, så att varje loggrad under åtgärden innehåller kontexten.
Lär dig Python med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 76
- Lektioner
- 320
Vanliga frågor
Är lektionen ”Strukturerad loggning” gratis?
Ja – hela texten till ”Strukturerad loggning” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Python Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i Python Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Strukturerad loggning”?
Generera JSON-formaterade loggar för maskinläsbara utdata. Ni övar på Python Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Python Academy?
Du behöver inga förkunskaper. Utbildningen i Python Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Strukturerad loggning”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Python Academy-lektionen?
Ja. Varje Python Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Grunderna i modulen logging
- Handlers, formatters och filter
- Strukturerad loggning
- Felsökning med pdb