当前位置: 首页 > 知识库问答 >
问题:

FastAPI uvicorn未记录错误

东郭赞
2023-03-14

我正在学习Fastapi,我正在localhost启动一个uvicorn服务器。每当出现错误/异常时,我都不会得到回溯。所有我得到的是:INFO:127.0.0.1:56914-"POST /create/user/HTTP/1.1"500内部服务器错误

所以,调试很困难,我正在试用python的日志模块

 import logging
 log = logging.getLogger("uvicorn")
 log.setLevel(logging.DEBUG)

我还尝试过使用调试参数启动uvicorn

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. 

共有2个答案

冯通
2023-03-14

对于在发布请求期间发生的“500内部服务器错误”,如果您在调试模式下调用FastAPI:

app = FastAPI(debug=True)

在Chrome开发工具网络选项卡打开的情况下重试该请求。当您看到出现失败的请求时(注意-此处我的路由url为“/rule”):

单击它,您将在获取/XHR/响应选项卡窗口中看到Traceback文本。

您可以通过在帖子处理程序中插入“断言错误”来快速验证它。

陆昂然
2023-03-14

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

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


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启动时保持启用夸脱/烧瓶/等。或者,您可以将禁用现有的\u记录器设置为False。但这将使所有记录器保持启用状态,然后您可能会收到比您希望的更多的消息。

最后,将配置传递给uvicorn:

uvicorn.run(app, **config)

当uvicorn的日志记录配置将disable_existing_logger设置为True时,所有其他记录器都将被禁用。这也意味着记录器夸脱和烧瓶使用(打印回溯)被禁用。您可以将配置设置为不禁用其他记录器,或者将它们重新添加到配置中,以便uvicorn不会首先禁用它们。

 类似资料:
  • 问题内容: 我一直在阅读“错误日志记录”,并且想出了“ error_log”函数,它似乎是处理错误日志记录的好工具。但是,最流畅和最佳的使用方式是什么? 如果我有一个 这会将错误记录在my-errors.log文件中。但是,如果我有时需要更改文件位置,新文件夹或其他内容的位置,该怎么办?如果我有大量文件,则需要全部更改。 现在,我开始考虑使用变量来设置错误日志的路径。当然可以,但是如果我想在函数或

  • 0.3 新版功能. 应用故障,服务器故障。早晚你会在产品中看见异常。即使你的代码是 100% 正确的, 你仍然会不时看见异常。为什么?因为涉及的所有一切都会出现故障。这里给出一些 完美正确的代码导致服务器错误的情况: 客户端在应用读取到达数据时,提前终止请求 数据库服务器超载,并无法处理查询 文件系统满了 硬盘损坏 后端服务器超载 你所用的库出现程序错误 服务器的网络连接或其它系统故障 而且这只是

  • 可确认下载失败或无法与互联网连接时等,最新的10件错误历史记录。 轻触列表的错误项目,会显示详细内容。部分项目还可确认建议解决方法。

  • 我对Kafka是完全陌生的,我在使用Kafka制作人时遇到了一些麻烦。生成器的send方法恰好阻塞1min,然后应用程序无一例外地继续。这显然是一些超时,但没有抛出异常。 我在原木上也看不出什么真正的东西。 kafka.properties文件中的属性: 因此,producer.send阻塞1分钟,然后继续。在结尾,Kafka没有储存任何东西,但新的话题被创造出来了。谢谢你的帮助!

  • 更新:任何人都知道如何强迫另一个流到麦克风音频源。这需要原生android代码。请在这方面帮助我,请参考这个问题,以获得更多关于路由音频的详细信息

  • 本章讨论Laravel项目中的错误和日志记录以及如何处理它们。 Errors 正在进行的项目承担一些错误。 启动新的Laravel项目时,已经为您配置了错误和异常处理。 通常,在本地环境中,我们需要查看错误以进行调试。 我们需要在生产环境中隐藏用户的这些错误。 这可以通过存储在应用程序根目录的环境文件.env设置的变量APP_DEBUG来实现。 对于本地环境, APP_DEBUG的值应为true但