Aar*_*lin 5 python datetime structlog
Structlog 似乎在创建日志消息时使用__repr__,这导致date对象datetime看起来'datetime.datetime(2018, 9, 20, 10, 1, 52, 414750)'更'2018-09-20 10:01:52.414750'可取。
我本以为会有一个现成的处理器来处理这个问题,但我找不到。
这是我提出的解决方案,但考虑到它的高度递归性质以及不必要的list和dict对象重建,我担心性能。
def _convert_dates(obj):
if isinstance(obj, datetime.date):
# all datetimes are also dates
return str(obj)
elif isinstance(obj, dict):
# Assume dates won't be keys
return {k: _convert_dates(v) for k, v in obj.items()}
elif isinstance(obj, list):
return [_convert_dates(v) for v in obj]
return obj
def dates_to_str_filter(_, __, event):
return _convert_dates(event)
Run Code Online (Sandbox Code Playgroud)
然后dates_to_str_filter加入processors通话structlog.configure。