跳转至

结构日志

Logfire 有一个内置的 structlog 处理器,可用于为每个 structlog 事件发出 Logfire 日志。

main.py
from dataclasses import dataclass

import structlog
import logfire

logfire.configure()

structlog.configure(
    processors=[
        structlog.contextvars.merge_contextvars,
        structlog.processors.add_log_level,
        structlog.processors.StackInfoRenderer(),
        structlog.dev.set_exc_info,
        structlog.processors.TimeStamper(fmt='%Y-%m-%d %H:%M:%S', utc=False),
        logfire.StructlogProcessor(),
        structlog.dev.ConsoleRenderer(),
    ],
)
logger = structlog.get_logger()


@dataclass
class User:
    id: int
    name: str


logger.info('Login', user=User(id=42, name='Fred'))
#> 2024-03-22 12:57:33 [info     ] Login                          user=User(id=42, name='Fred')

Logfire 处理器必须位于 structlog 配置中呈现日志的最后一个处理器之前。

默认情况下,上面显示的 LogfireProcessor 会禁用 logfire 的控制台日志记录,因此您可以使用为 structlog 配置的现有记录器,如果要使用 logfire 进行记录,请使用 LogfireProcessor(console_log=True)

注意

位置参数不会被处理器作为属性收集,因为在调用处理器时,它们已经是事件消息的一部分。

如果您有以下条件:

logger.error('Hello %s!', 'Fred')
#> 2024-03-22 13:39:26 [error    ] Hello Fred!

字符串 ''Fred'' 不会被处理器收集为属性,只是使用消息进行格式化。


本文总阅读量