首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FastAPI uvicorn未记录错误

FastAPI uvicorn未记录错误
EN

Stack Overflow用户
提问于 2021-03-12 23:10:13
回答 1查看 4.7K关注 0票数 9

我正在学习fastapi,并且在localhost上启动了一个uvicorn服务器。每当出现错误/异常时,我都不会得到回溯。我得到的全部信息是:INFO: 127.0.0.1:56914 - "POST /create/user/ HTTP/1.1" 500 Internal Server Error

因此,很难调试,我正在尝试python的日志记录模块。

代码语言:javascript
复制
 import logging
 log = logging.getLogger("uvicorn")
 log.setLevel(logging.DEBUG)

我还尝试使用debug参数启动uvicorn

代码语言:javascript
复制
if __name__ == "__main__":
    dev = 1
    print("printing")
    if dev == 1:
        uvicorn.run('main:app', host="127.0.0.1", port=5000, log_level="info", reload=True, debug=True)
    if dev == 2:
        uvicorn.run('main:app', host="127.0.0.1", port=5000, log_level="info", workers=2)


still the same problem persists. I am in development phase and I need to error traceback,please guide. 
EN

回答 1

Stack Overflow用户

发布于 2021-03-13 12:17:05

解决方案/修复

现在,当您通过Python中的命令uvicorn.run(app)执行uvicorn时,这是您的下一步:

获取ucivorn默认日志记录配置,并将应用程序中的处理程序添加到其中:

代码语言:javascript
复制
config = {}

# this is default (site-packages\uvicorn\main.py)
config['log_config'] = {
            'version': 1, 'disable_existing_loggers': True,
            'formatters': {'default': {'()': 'uvicorn.logging.DefaultFormatter', 'fmt': '%(levelprefix)s %(message)s', 'use_colors': None},
                           'access': {'()': 'uvicorn.logging.AccessFormatter', 'fmt': '%(levelprefix)s %(client_addr)s - "%(request_line)s" %(status_code)s'}},
            'handlers': {'default': {'formatter': 'default', 'class': 'logging.StreamHandler', 'stream': 'ext://sys.stderr'},
                         'access': {'formatter': 'access', 'class': 'logging.StreamHandler', 'stream': 'ext://sys.stdout'}},
            'loggers': {'uvicorn': {'handlers': ['default'], 'level': 'INFO'},
                        'uvicorn.error': {'level': 'INFO', 'handlers': ['default'], 'propagate': True},
                        'uvicorn.access': {'handlers': ['access'], 'level': 'INFO', 'propagate': False},
                        },
        }

# add your handler to it (in my case, I'm working with quart, but you can do this with Flask etc. as well, they're all the same)
config['log_config']['loggers']['quart'] = {'handlers': ['default'], 'level': 'INFO'}

这将使记录器在uvicorn启动时保持来自quart/Flask等的启用状态。或者,您可以将disable_existing_loggers设置为False。但这将使所有记录器保持启用状态,然后您可能会收到比您希望的更多的消息。

最后,将配置传递给uvicorn:

代码语言:javascript
复制
uvicorn.run(app, **config)

解释

当uvicorn的日志配置将disable_existing_loggers设置为True时,所有其他日志程序都将被禁用。这也意味着记录器quart和Flask的使用(打印回溯)被禁用。您可以将配置设置为不禁用其他记录器,也可以将它们重新添加到配置中,这样uvicorn就不会在第一时间禁用它们。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66602480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档