500个错误,在apache日志中没有任何内容

2024-04-25 23:52:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在开发一个基于flask的应用程序。它使用app.run()手动生成服务器。我现在已经试着通过mod_wsgi来运行它了。奇怪的是,我有500个错误,日志里什么也没有。我做了一些调查,以下是我的发现。

  • 插入类似print >>sys.stderr, "hello"的行可以正常工作。消息显示在错误日志中。
  • 当不使用模板调用方法时,它工作得很好。没有500个错误。
  • 使用一个简单的模板也可以。
  • 但是一旦我在模板(例如在查询上循环)内触发数据库访问,就会得到错误。

我的直觉告诉我,是SQLAlchemy发出了一个错误,也许某些日志配置会导致日志在应用程序中的某个点被丢弃。

另外,为了测试,我使用SQLite。据我所知,这只能从一个线程访问。因此,如果mod_wsgi生成更多线程,则可能会中断应用程序。

我有点不知所措,因为它只会在mod_wsgi后面运行,这似乎也吞没了我的错误。我该怎么做才能使错误冒泡到apache错误日志中?

作为参考,可以看到代码on this github permalink


Tags: run服务器模板modapp应用程序消息flask
3条回答

我遇到了一个类似的问题:偶尔出现“内部服务器错误”,没有日志。当您使用mod wsgi时,您应该删除“app.run()”,因为这将始终启动本地wsgi服务器,如果我们将该应用程序部署到mod wsgi,则不希望启动本地wsgi服务器。见docs。我不知道这是不是你的情况,但我希望这能有所帮助。

如果您将它放入您的config.py中,它将极大地帮助将错误传播到apache错误日志:

PROPAGATE_EXCEPTIONS = True

结果我没有完全错。异常确实是由sqlalchemy引发的。默认情况下,当它被流到stdout时,mod_wsgi会默默地忽略它(据我所知)。

回答我的主要问题:如何查看WSGI应用程序产生的错误?

其实很简单。将日志重定向到stderr。您只需要将以下内容添加到WSGI脚本中:

import logging, sys
logging.basicConfig(stream=sys.stderr)

现在,这是最普通的日志配置。由于我还没有为我的应用程序准备好任何东西,这就可以了。但是,我想,一旦应用程序成熟,无论如何你都会有一个更复杂的日志配置,所以这不会咬你。

但是对于快速而肮脏的调试来说,这将很好。

相关问题 更多 >