Как я могу записать дату и дату и время в виде строк в structlog? - PullRequest
0 голосов
/ 20 сентября 2018

Structlog, кажется, использует __repr__ при создании сообщений журнала, что приводит к объектам date и datetime, выглядящим как 'datetime.datetime(2018, 9, 20, 10, 1, 52, 414750)', где '2018-09-20 10:01:52.414750' было бы предпочтительным.

Я бы подумал, что тамЯ бы не смог обработать это самостоятельно, но я не могу его найти.

1 Ответ

0 голосов
/ 20 сентября 2018

Это решение, которое я придумала, но меня беспокоит производительность, учитывая ее высокую рекурсивность и ненужную перестройку объектов 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)

Затем включите dates_to_str_filter в processors для вызова structlog.configure.

...