Skip to content

Commit a1057e3

Browse files
committed
Added tests for request log, remove all imports of json_logging
1 parent 0497f34 commit a1057e3

File tree

3 files changed

+40
-3
lines changed

3 files changed

+40
-3
lines changed

json_logging/util.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ def __new__(cls, *args, **kw):
120120

121121
return cls._instance
122122

123-
def get_correlation_id(self, request=None,within_formatter=False):
123+
def get_correlation_id(self, request=None, within_formatter=False):
124124
"""
125125
Gets the correlation id from the header of the request. \
126126
It tries to search from json_logging.CORRELATION_ID_HEADERS list, one by one.\n

tests/helpers/imports.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
"""Helper functions related to module imports"""
2+
import sys
3+
4+
5+
def undo_imports_from_package(package: str):
6+
"""Removes all imported modules from the given package from sys.modules"""
7+
for k in sorted(sys.modules.keys(), key=lambda s: len(s), reverse=True):
8+
if k == package or k.startswith(package + '.'):
9+
del sys.modules[k]

tests/test_flask.py

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
from helpers import constants
1212
from helpers.handler import FormattedMessageCollectorHandler
13+
from helpers.imports import undo_imports_from_package
1314

1415
LOGGER_NAME = "flask-test"
1516

@@ -29,7 +30,7 @@ def client_and_log_handler():
2930

3031
# Add json_logging
3132
json_logging.init_flask(enable_json=True)
32-
json_logging.init_request_instrument(app)
33+
json_logging.init_request_instrument(app, exclude_url_patterns=["/no-request-instrumentation"])
3334

3435
# Prepare test endpoints
3536
@app.route("/log/levels/debug")
@@ -67,12 +68,16 @@ def log_exception():
6768
def get_correlation_id():
6869
return {'correlation_id': json_logging.get_correlation_id()}
6970

71+
@app.route('/no-request-instrumentation')
72+
def excluded_from_request_instrumentation():
73+
return {}
74+
7075
with app.test_client() as test_client:
7176
yield test_client, handler
7277

7378
# Tear down test environment
7479
logger.removeHandler(handler)
75-
del sys.modules["json_logging"] # "de-import" because json_logging maintains global state
80+
undo_imports_from_package("json_logging") # Necessary because of json-logging's global state
7681

7782

7883
@pytest.mark.parametrize("level", ["debug", "info", "error"])
@@ -162,3 +167,26 @@ def test_exception_logged_with_stack_trace(client_and_log_handler):
162167
assert "Traceback (most recent call last):" in msg["exc_info"], "Not a stack trace"
163168
assert "RuntimeError" in msg["exc_info"], "Exception type not logged"
164169
assert len(msg["exc_info"].split("\n")) > 2, "Stacktrace doesn't have multiple lines"
170+
171+
172+
def test_request_instrumentation(client_and_log_handler):
173+
api_client, _ = client_and_log_handler
174+
request_logger = logging.getLogger("flask-request-logger")
175+
handler = FormattedMessageCollectorHandler()
176+
request_logger.addHandler(handler)
177+
178+
response = api_client.get("/log/levels/debug")
179+
180+
assert response.status_code == 200
181+
assert len(handler.messages) == 1
182+
183+
def test_excluded_from_request_instrumentation(client_and_log_handler):
184+
api_client, _ = client_and_log_handler
185+
request_logger = logging.getLogger("flask-request-logger")
186+
handler = FormattedMessageCollectorHandler()
187+
request_logger.addHandler(handler)
188+
189+
response = api_client.get("/no-request-instrumentation")
190+
191+
assert response.status_code == 200
192+
assert len(handler.messages) == 0

0 commit comments

Comments
 (0)