如何使用structlog将日期和日期时间记录为字符串?

时间:2018-09-20 14:37:40

标签: python datetime structlog

在创建日志消息时,Structlog似乎使用__repr__,导致datedatetime对象看起来像'datetime.datetime(2018, 9, 20, 10, 1, 52, 414750)',其中'2018-09-20 10:01:52.414750'更可取。 / p>

我本以为会有一个自处理器来处理此问题,但我找不到。

1 个答案:

答案 0 :(得分:0)

这是我想出的解决方案,但是考虑到它的高度递归特性以及listdict对象的不必要的重建,我担心性能。

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)

然后在dates_to_str_filter的{​​{1}}中加入processors