diff --git a/shared/logging/src/airflow_shared/logging/structlog.py b/shared/logging/src/airflow_shared/logging/structlog.py index a4fe4ec384c5c..9b617f40c82aa 100644 --- a/shared/logging/src/airflow_shared/logging/structlog.py +++ b/shared/logging/src/airflow_shared/logging/structlog.py @@ -316,7 +316,17 @@ def json_dumps(msg, default): "event": msg.pop("event"), **msg, } - return msgspec.json.encode(msg, enc_hook=default) + + def safe_default(obj): + """Fall back to str() if the default enc_hook fails or is None.""" + if default is not None: + try: + return default(obj) + except TypeError: + pass + return str(obj) + + return msgspec.json.encode(msg, enc_hook=safe_default) json = structlog.processors.JSONRenderer(serializer=json_dumps)