(20241209) Better session info capture in the logs.
This commit is contained in:
+30
-24
@@ -26,7 +26,7 @@
|
||||
DECORATORS.
|
||||
|
||||
"""
|
||||
|
||||
import copy
|
||||
|
||||
# *****************************************************************************************************************
|
||||
# ***** ****
|
||||
@@ -81,6 +81,9 @@ import asyncio
|
||||
import time
|
||||
import datetime
|
||||
|
||||
# To make copies:
|
||||
import copy
|
||||
|
||||
|
||||
# *****************************************************************************************************************
|
||||
# ***** ****
|
||||
@@ -374,55 +377,58 @@ def summarize_variable(
|
||||
:return: The summarized version of the input.
|
||||
"""
|
||||
|
||||
# If a null value was sent:
|
||||
# Basic prep:
|
||||
if value is None: return None
|
||||
|
||||
# Check the sensitive keys:
|
||||
if sensitive_keys is None: sensitive_keys = []
|
||||
value_copy = copy.deepcopy(value)
|
||||
|
||||
# If the value is a Pydantic model, we convert to dict:
|
||||
if isinstance(value_copy, pydantic.BaseModel):
|
||||
value_copy = value_copy.model_dump()
|
||||
|
||||
# Handle datatypes that you don't want to modify:
|
||||
if isinstance(value, (int, float, bool, NoneType)): pass
|
||||
if isinstance(value_copy, (int, float, bool, NoneType)): pass
|
||||
|
||||
# When the value is a list or similar iterable:
|
||||
elif isinstance(value, (list, tuple, set)):
|
||||
elif isinstance(value_copy, (list, tuple, set)):
|
||||
if expand:
|
||||
if not isinstance(expand, bool): expand -= 1
|
||||
value = [AsyncLoggerContext.summarize(
|
||||
value_copy = [AsyncLoggerContext.summarize(
|
||||
v,
|
||||
expand = expand,
|
||||
sensitive_keys = sensitive_keys
|
||||
) for v in value]
|
||||
else: value = f"array of {len(value)} item(s)"
|
||||
) for v in value_copy]
|
||||
else: value_copy = f"array of {len(value_copy)} item(s)"
|
||||
|
||||
# If the value is a dict:
|
||||
elif isinstance(value, dict):
|
||||
elif isinstance(value_copy, dict):
|
||||
if expand:
|
||||
if not isinstance(expand, bool): expand -= 1
|
||||
value = {
|
||||
value_copy = {
|
||||
k: AsyncLoggerContext.summarize(
|
||||
v,
|
||||
expand = expand,
|
||||
sensitive_keys = sensitive_keys
|
||||
) if k not in sensitive_keys else "********"
|
||||
for k, v in value.items()
|
||||
) if k not in sensitive_keys else f"{len(str(v))} sensitive char(s)"
|
||||
for k, v in value_copy.items()
|
||||
}
|
||||
else: value = f"object of {len(value.keys())} field(s) [{', '.join(value.keys())}]"
|
||||
else: value_copy = f"object of {len(value_copy.keys())} field(s) [{', '.join(value_copy.keys())}]"
|
||||
|
||||
# When a dataframe is passed:
|
||||
elif isinstance(value, pd.DataFrame):
|
||||
cols = value.columns.to_list()
|
||||
value = f"table with {len(cols)} col(s) [{', '.join(cols)}] and {len(value)} row(s)"
|
||||
str_limit = 999
|
||||
elif isinstance(value_copy, pd.DataFrame):
|
||||
cols = value_copy.columns.to_list()
|
||||
value_copy = f"table with {len(cols)} col(s) [{', '.join(cols)}] and {len(value_copy)} row(s)"
|
||||
str_limit = 1024
|
||||
|
||||
# If the input is some form of non-standard object:
|
||||
else: value = str(value)
|
||||
else: value_copy = str(value_copy)
|
||||
|
||||
# Handle strings:
|
||||
if isinstance(value, str):
|
||||
if len(value) > str_limit: value = value[:str_limit] + "..."
|
||||
if isinstance(value_copy, str):
|
||||
if len(value_copy) > str_limit: value_copy = value_copy[:str_limit] + "...(trunc'd)"
|
||||
|
||||
# Done here:
|
||||
return value
|
||||
return value_copy
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------------------------------------------------
|
||||
@@ -867,7 +873,7 @@ def log_request_to_mongo(
|
||||
if sensitive_keys:
|
||||
for k in sensitive_keys:
|
||||
for var in ["inbound_headers", "inbound_data"]:
|
||||
try: kwargs[var][k] = len(str(kwargs[var][k])) * "*"
|
||||
try: kwargs[var][k] = f"{len(str(kwargs[var][k]))} sensitive char(s)"
|
||||
except: pass
|
||||
|
||||
# Construct the log:
|
||||
@@ -883,7 +889,7 @@ def log_request_to_mongo(
|
||||
ts = request_ts,
|
||||
tat = time.perf_counter() - start_ts,
|
||||
cpuTime = time.process_time() - cpu_start_ts,
|
||||
sessionInfo = kwargs.get("session_info"),
|
||||
sessionInfo = summarize_variable(kwargs.get("session_info"), expand = True),
|
||||
method = request_method,
|
||||
url = request_url,
|
||||
route = request_route,
|
||||
|
||||
Reference in New Issue
Block a user