context filter for adding additional data to logs
This commit is contained in:
parent
34149de04d
commit
5d05c146d6
@ -2,10 +2,18 @@ import datetime
|
|||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
|
||||||
|
from flask import g, request
|
||||||
|
|
||||||
class ContextFilter(logging.Filter):
|
|
||||||
# this should impart the request_id and user_id if available
|
class RequestContextFilter(logging.Filter):
|
||||||
pass
|
def filter(self, record):
|
||||||
|
if getattr(g, "current_user", None):
|
||||||
|
record.user_id = str(g.current_user.id)
|
||||||
|
|
||||||
|
if request.environ.get("HTTP_X_REQUEST_ID"):
|
||||||
|
record.request_id = request.environ.get("HTTP_X_REQUEST_ID")
|
||||||
|
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
def epoch_to_iso8601(ts):
|
def epoch_to_iso8601(ts):
|
||||||
|
@ -1,10 +1,13 @@
|
|||||||
from io import StringIO
|
from io import StringIO
|
||||||
import json
|
import json
|
||||||
import logging
|
import logging
|
||||||
|
from uuid import uuid4
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from atst.utils.logging import JsonFormatter
|
from atst.utils.logging import JsonFormatter, RequestContextFilter
|
||||||
|
|
||||||
|
from tests.factories import UserFactory
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest.fixture
|
||||||
@ -30,6 +33,8 @@ def logger(log_stream):
|
|||||||
logHandler = logging.StreamHandler(log_stream)
|
logHandler = logging.StreamHandler(log_stream)
|
||||||
formatter = JsonFormatter()
|
formatter = JsonFormatter()
|
||||||
logHandler.setFormatter(formatter)
|
logHandler.setFormatter(formatter)
|
||||||
|
logger.setLevel(logging.INFO)
|
||||||
|
logger.addFilter(RequestContextFilter())
|
||||||
logger.addHandler(logHandler)
|
logger.addHandler(logHandler)
|
||||||
|
|
||||||
return logger
|
return logger
|
||||||
@ -55,3 +60,15 @@ def test_json_formatter_for_exceptions(logger, log_stream_content):
|
|||||||
log = json.loads(log_stream_content())
|
log = json.loads(log_stream_content())
|
||||||
assert log["severity"] == "ERROR"
|
assert log["severity"] == "ERROR"
|
||||||
assert log.get("details")
|
assert log.get("details")
|
||||||
|
|
||||||
|
|
||||||
|
def test_request_context_filter(logger, log_stream_content, request_ctx):
|
||||||
|
user = UserFactory.create()
|
||||||
|
uuid = str(uuid4())
|
||||||
|
|
||||||
|
request_ctx.g.current_user = user
|
||||||
|
request_ctx.request.environ["HTTP_X_REQUEST_ID"] = uuid
|
||||||
|
logger.info("this user is doing something")
|
||||||
|
log = json.loads(log_stream_content())
|
||||||
|
assert log["user_id"] == str(user.id)
|
||||||
|
assert log["request_id"] == uuid
|
||||||
|
Loading…
x
Reference in New Issue
Block a user