Как использовать structlog с журналами в формате logfmt в Python?Python

Программы на Python
Anonymous
Как использовать structlog с журналами в формате logfmt в Python?

Сообщение Anonymous »

Я хочу распечатать корневые журналы в формате logfmt. structlog также должен печатать журналы в том же формате. Я попробовал этот пример для формата JSON и похоже, что он не работает с logfmt.
Вот первая попытка:

Код: Выделить всё

import logging
import sys

import logfmter
import structlog

handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(logfmter.Logfmter())
root_logger = logging.getLogger()
root_logger.addHandler(handler)

structlog.get_logger("test").warning("hello")
logging.getLogger("test").warning("hello")
Печатает:

Код: Выделить всё

2024-06-04 22:11:01 [warning  ] hello
at=WARNING msg=hello
Вот structlog определенно не в формате logfmt.
Я пытался добавить logfmt render затем:

Код: Выделить всё

import logging
import sys

import logfmter
import structlog

handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(logfmter.Logfmter())
root_logger = logging.getLogger()
root_logger.addHandler(handler)

structlog.configure(
processors=[
structlog.stdlib.filter_by_level,
structlog.stdlib.add_logger_name,
structlog.stdlib.add_log_level,
structlog.stdlib.PositionalArgumentsFormatter(),
structlog.processors.TimeStamper(fmt='iso'),
structlog.processors.StackInfoRenderer(),
structlog.processors.format_exc_info,
# ADD LOGFMT RENDER
structlog.processors.LogfmtRenderer(),
],
logger_factory=structlog.stdlib.LoggerFactory(),
wrapper_class=structlog.stdlib.BoundLogger,
cache_logger_on_first_use=True,
)

structlog.get_logger("test").warning("hello")
logging.getLogger("test").warning("hello")
И снова провал:

Код: Выделить всё

at=WARNING msg="event=hello logger=test level=warning timestamp=2024-06-04T13:12:54.637931Z"
at=WARNING msg=hello
Очевидно, правильная строка журнала должна выглядеть так:

Код: Выделить всё

at=WARNING msg=hello logger=test level=warning timestamp=2024-06-04T13:12:54.637931Z
Можно ли форматировать как structlog, так и журналирование как logfmt?

Подробнее здесь: https://stackoverflow.com/questions/785 ... -in-python

Вернуться в «Python»