【问题标题】:Configuring and using structlog with Django使用 Django 配置和使用 structlog
【发布时间】:2017-10-06 22:04:54
【问题描述】:

有人在 Django 中使用structlog 吗?我正在寻找一个代码示例,如何集成 Django 日志记录(通过标准库完成)和 structlog。

我已经尝试了"Rendering Using structlog-based Formatters Within logging" 示例中的代码,只做了轻微的修改:

# From my settings.py, basically the same code as in the linked example

timestamper = structlog.processors.TimeStamper(fmt="%Y-%m-%d %H:%M:%S")
pre_chain = [
    structlog.stdlib.add_log_level,
    timestamper,
]
LOGGING = {
    "version": 1,
    "disable_existing_loggers": False,
    "formatters": { ... },  # Exactly like in the linked example
    "handlers": { ... },    # Ditto, but only "default" handler (no files)
    "loggers": {
        "django": {
            "handlers": ["default"],
            "level": "INFO",
        },
        # I also had "" logger here, with the same config as "django",
        # but it's irrelevant for the example purposes.
    }
}
# Same as in the example
structlog.configure(
    processors=[
        structlog.stdlib.add_log_level,
        structlog.stdlib.PositionalArgumentsFormatter(),
        timestamper,
        structlog.processors.StackInfoRenderer(),
        structlog.processors.format_exc_info,
        structlog.stdlib.ProcessorFormatter.wrap_for_formatter,
    ],
    context_class=dict,
    logger_factory=structlog.stdlib.LoggerFactory(),
    wrapper_class=structlog.stdlib.BoundLogger,
    cache_logger_on_first_use=True,
)

但是,我最终遇到了日志记录错误。这是一个以 404 结尾的简单 GET 请求的摘录

TypeError: not all arguments converted during string formatting
...
  File "/usr/local/lib/python3.6/site-packages/django/core/handlers/base.py", line 152, in get_response
    extra={'status_code': 404, 'request': request},
Message: '\x1b[2m2017-05-08 18:34:53\x1b[0m [\x1b[33m\x1b[1mwarning  \x1b[0m] \x1b[1mNot Found: /favicon.ico\x1b[0m'
Arguments: ('/favicon.ico',)

我试图弄清楚到底发生了什么,但在调试器中迷失了方向。

当然,我可以将structlog 仅用于应用程序日志记录,并保持标准库记录器的原样。但是,我希望所有日志记录统一,因此我的应用程序的输出将是统一的,可以进行解析。

我非常感谢一个代码 sn-p,它显示了如何正确地将 structlog 与 Django 集成。

【问题讨论】:

    标签: django python-3.x logging configuration


    【解决方案1】:

    这个错误很可能会在 structlog 17.2 中修复,应该很快就会发布:https://github.com/hynek/structlog/pull/117(如果它解决了您的问题,请随时发表评论或试用)。

    【讨论】:

    • 抱歉回复有点晚。刚刚签出 17.2 并且可以确认它很好地解决了问题。所有的日志记录都按照我的预期工作。非常感谢您的帮助,以及制作这个很棒的图书馆!
    猜你喜欢
    • 2017-07-07
    • 2014-01-16
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 2020-08-13
    • 2010-12-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多