Pass request details as log record extra fields #2321
+41
−22
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
I've running an application with uvicorn, and also using python-json-logger to output all production logs in JSON (to pass them to ELK as is, without complicated parsing config).
Here is an example logging config:
So instead of logs like these:
I got these:
Message contains lines like
127.0.0.1:60270 - \"GET /openapi.json HTTP/1.1\" 200
, but I prefer to have separated fieldsclient_address
,method
,full_path
,status
and so on.uvicorn.access
loger already has access to all of this info, but it is logged only in one text fieldmessage
, which I don't want to parse.Instead, I've changed the way
access_log.info
is called - arguments are passed both to message format and toextra
, so they can be accessed by other log formatters fromLogRecord
object. The result is:Checklist