Django 项目的 Heroku 日志丢失错误

Posted

技术标签:

【中文标题】Django 项目的 Heroku 日志丢失错误【英文标题】:Heroku logs for Django projects missing errors 【发布时间】:2012-08-05 16:04:10 【问题描述】:

我正在 Heroku 上运行一个简单的 Django 项目。它可以工作,但如果我收到服务器错误,它不会在日志中给我任何详细信息。这使得错误难以处理。

现在我已经设置了一个临时服务器,它也有同样的问题 - 页面失败了,我没有得到任何关于原因的反馈。

$ heroku 日志

...

2012-08-08T13:55:58+00:00 app[web.1]: Development server is running at http://0.0.0.0:59048/
2012-08-08T13:55:59+00:00 heroku[web.1]: State changed from starting to up
2012-08-08T13:56:01+00:00 heroku[router]: GET [xxx].herokuapp.com/ dyno=web.1 queue=0 wait=0ms service=22ms status=500 bytes=27
2012-08-08T13:56:01+00:00 app[web.1]: [08/Aug/2012 14:56:01] "GET / HTTP/1.1" 500 27
2012-08-08T13:56:02+00:00 heroku[router]: GET [xxx].herokuapp.com/favicon.ico dyno=web.1 queue=0 wait=0ms service=6ms status=500 bytes=27
2012-08-08T13:56:09+00:00 heroku[router]: GET[xxx].herokuapp.com/admin dyno=web.1 queue=0 wait=0ms service=2ms status=301 bytes=0
2012-08-08T13:56:09+00:00 app[web.1]: [08/Aug/2012 14:56:09] "GET /admin HTTP/1.1" 301 0
2012-08-08T13:56:10+00:00 heroku[router]: GET [xxx].herokuapp.com/admin/ dyno=web.1 queue=0 wait=0ms service=224ms status=500 bytes=27
2012-08-08T13:56:10+00:00 app[web.1]: [08/Aug/2012 14:56:10] "GET /admin/ HTTP/1.1" 500 27
2012-08-08T13:56:10+00:00 heroku[router]: GET [xxx].herokuapp.com/favicon.ico dyno=web.1 queue=0 wait=0ms service=6ms status=500 bytes=27

如您所见,页面返回 500,但我没有收到任何堆栈跟踪信息或类似信息。

可能的问题可以通过以下方式表示:“开发服务器正在运行...” - 这是什么意思?它是否会影响错误日志记录?

另外,我正在使用“500.html”模板文件来定义自定义 500 错误页面。这会以某种方式隐藏错误吗?真的不应该。

或者我是否需要在另一个地方寻找 Heroku 上的 Django 日志?

谢谢!

【问题讨论】:

【参考方案1】:

只需在 settings.py 文件中更改 DEBUG 即可解决此问题。 调试=真

【讨论】:

【参考方案2】:

看起来这只是由于期望 Heroku 下的 Django 会像 Rails 一样工作而导致的问题。傻我。

对于从一种框架/语言迁移到另一种框架/语言时遇到此问题的其他人:

当调试关闭时,Django 使用标准 Python 记录器来处理代码中的错误。 settings.py 底部有一个默认设置,当出现错误时会向站点管理员发送电子邮件。好的。它需要 settings.py 中 ADMINS 变量中的一组电子邮件地址才能工作。

默认情况下,错误会发送到 STDERR 而不是 STDOUT,因此它们不会显示在日志中。这显然可以改变。如果您想要这种行为,请在此处尝试:

http://codeinthehole.com/writing/console-logging-to-stdout-in-django/

【讨论】:

Heroku 的文档表明他们将同时记录 stderr 和 stdout...我想知道当您回答这个问题时这是否有所不同现在已经改变? devcenter.heroku.com/articles/logging#writing-to-your-log我想我可以测试一下。 我遇到的问题与 Heroku 无关,它按我的预期工作。它与 Django 一起使用,它不像 Rails 那样工作。也许很明显。【参考方案3】:

此行为由服务器(例如 gunicorn)设置,而不是 Django 或 Heroku。

通常有一个命令行或配置可以更改默认日志级别。

【讨论】:

啊,那么默认的 Heroku 设置没有显示堆栈跟踪?谢谢,这给了我一个尝试的方向。如果有成果,我会解释我的解决方案并接受。 好的,我已经尝试使用 gunicorn 并将日志记录级别设置为调试。没有骰子。更新主要问题。 我发现,行为是由 Django 使用 settings.py 底部的日志设置设置的。起初这有点不透明,但我知道这是一个标准的 Python 记录器设置,所以互联网上会有很多帮助。

以上是关于Django 项目的 Heroku 日志丢失错误的主要内容,如果未能解决你的问题,请参考以下文章

我创建了一个 django 软件,它在 localhost 上运行,但不能在 heroku 上工作,它的日志显示了这个

在Heroku上部署Django应用程序:错误[R10]

每当我尝试将我的 django 应用程序推送到 Heroku 时,我的日志文件中都会出现以下错误,请协助我应该如何解决它,

Python / Django项目上的Heroku / Redis连接错误

Django Heroku 应用程序错误。有啥不妥?

Heroku:每次测功机重新启动时都会丢失 Django 数据库文件