【问题标题】:GCP cloud-run - Python code does not leave stack-trace when it crashesGCP 云运行 - Python 代码在崩溃时不会留下堆栈跟踪
【发布时间】:2023-02-03 08:35:14
【问题描述】:

当我在 GCP 云运行上部署基于 python flask 的服务时,我遇到了一个奇怪的情况。

我的代码中有一些错误导致在处理某些 Web API 时崩溃。但是 GCP 云运行日志除了 500 错误消息外没有显示任何内容。同样的代码,当我在我的机器上本地部署时,会抛出一个正确的异常,其中包含行号和其他详细信息。我如何让 GCP 云运行日志显示所有这些?我的代码中的所有其他日志(其他打印语句、记录器输出等)都可靠地显示。只是这些 python 异常没有出现——使得无法解决生产中发生的问题。

我附上了一张显示 GCP 记录器输出的图像。你在那里看到了 500 错误,但没有关于我的代码在哪里发生异常等等。

【问题讨论】:

  • 你如何登录你的代码?你能分享你的这部分代码吗?
  • 我正在使用 Python 的日志记录模块进行记录——您在该图像中看到的消息来自那里。但是我想看到的崩溃和堆栈跟踪无论如何都不会是我的显式日志……我不确定 GCP 将这些消息放在哪里以及为什么它们不显示在这些日志中。对于您的具体问题 - 我只是使用 logging.getLogger("my-log-name").critical("my message")
  • 事实证明,我的问题与使用 gunicorn 构建和部署 cloudrun 实例有关
  • @sachinsdesai,请发表您的评论作为答案,以便其他社区成员发现这有帮助。

标签: python google-cloud-platform google-cloud-run crash-dumps


【解决方案1】:

将此作为社区 wiki 发布,@sachinsdesai 提到在构建和部署 Cloud Run 实例时使用 gunicorn 时会出现此问题。

【讨论】:

    【解决方案2】:

    在我的 Dockerfile 中,我必须将第一行替换为第二行才能正常工作。我仍然没有找到解释。但我很高兴做出改变 - 调试更容易 - 特别是对于长期存在的应用程序,在这些应用程序中,人们并不总是能够奢侈地检测代码重现意外发生的问题。

    CMD exec gunicorn --bind :$PORT --workers 1 --threads 8 --timeout 0 my_main:app
    
    CMD [ "python", "-u", "my_main.py"]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多