Struktureret logging
Udsend JSON-formaterede logs, der kan læses af maskiner.
Struktureret logging er en gratis Python Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Python Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Python Academy-kurset indeholder 4 lektioner i alt.
Hvad er struktureret logning?
Struktureret logning udsender logposter som maskinlæsbare data (JSON) i stedet for frit tekstformat, så de er nemme at indeksere, søge i og oprette alarmer på.
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")Brugerdefineret JSON-formatering
Opret en underklasse af logging.Formatter for at udsende JSON i stedet for almindelig 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
Pakken python-json-logger leverer en færdig JSON-formatering med standardfelter og ekstra felter.
# 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 er et populært tredjepartsbibliotek, der adskiller akkumulering af kontekst fra formateringen og understøtter kæder af processorer.
# pip install structlog
import structlog
log = structlog.get_logger()
log = log.bind(request_id="abc123")
log.info("payment_processed", amount=49.99, currency="USD")Binding af kontekst med structlog
structlog lader dig knytte nøgleværdipar til en logger, så de følger med i alle efterfølgende kald.
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}Tilføjelse af tidsstempler og oplysninger om kaldere
Processorer kan automatisk berige poster. Tilføj TimeStamper og CallsiteParameterAdder til hver logpost.
import structlog
structlog.configure(
processors=[
structlog.processors.TimeStamper(fmt="iso"),
structlog.processors.CallsiteParameterAdder([structlog.processors.CallsiteParameter.FILENAME]),
structlog.processors.JSONRenderer(),
]
)Logning af anmodnings-id'er i webapps
I en webapplikation skal du knytte et anmodnings-id ved starten af hver anmodning, så hver loglinje under anmodningen indeholder 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-logformat
Elastic Common Schema (ECS) er et standardiseret JSON-logformat, der bruges af Elastic Stack. Brug ecs-logging til 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")Systemer til logaggregering
Strukturerede JSON-logfiler flyder naturligt ind i værktøjer til aggregering: Elasticsearch/Kibana (ELK), Grafana Loki, Datadog og AWS CloudWatch Logs Insights.
# Loki query example:
# {app="myservice"} | json | level="ERROR"
# CloudWatch Insights:
# fields @timestamp, level, msg
# | filter level = "ERROR"
# | sort @timestamp descUndgå personhenførbare oplysninger i logfiler
Fjern personhenførbare oplysninger før logning. Brug en brugerdefineret processor eller et filter til at maskere e-mailadresser, tokens og adgangskoder.
import re
def mask_pii(_, __, event_dict):
msg = event_dict.get("event", "")
event_dict["event"] = re.sub(
r"[\w.+-]+@[\w-]+\.[\w.]+", "***@***.***", msg
)
return event_dictAfvejning mellem strukturerede og ustrukturerede logfiler
Strukturerede logfiler er søgbare og kan bruges til alarmer, men de er ordrige. Kombinér struktureret logning i produktion med menneskeligt læsbar formatering under udvikling ved hjælp af miljøbaseret konfiguration.
import structlog, os
if os.getenv("ENV") == "production":
renderer = structlog.processors.JSONRenderer()
else:
renderer = structlog.dev.ConsoleRenderer()
structlog.configure(processors=[renderer])Hurtigt tjek
Hvad er den største fordel ved JSON-strukturerede logfiler frem for logfiler i almindelig tekst?
Opsummering
Struktureret logning udsender JSON-poster med nøgleværdier. Brug en JSONFormatter, python-json-logger eller structlog. Knyt kontekst (anmodnings-id, bruger) ved starten af en handling, så hver loglinje under handlingen indeholder konteksten.
Lær Python med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 76
- Lektioner
- 320
Ofte stillede spørgsmål
Er lektionen “Struktureret logging” gratis?
Ja — hele teksten til “Struktureret logging” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Python Academy-kurset, skal du opgradere til CoddyKit PRO. Python Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Struktureret logging”?
Udsend JSON-formaterede logs, der kan læses af maskiner. Du øver dig i Python Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Python Academy?
Der kræves ingen tidligere erfaring. Python Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Struktureret logging”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Python Academy-lektion?
Ja. Alle Python Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Grundlæggende om logging-modulet
- Handlers, formatters og filtre
- Struktureret logging
- Fejlfinding med pdb