2012-08-08 72 views
11

我正在Heroku上运行一个简单的Django项目。它的工作原理,但如果我得到一个服务器错误,它不会给我任何日志中的细节。这使得错误很难处理。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日志?

谢谢!

回答

9

看起来这只是一个简单的问题,因为期望Heroku下的Django会像Rails一样工作。傻我。

对于任何一个框架中/语言之间移动时患其他这个问题:

  • 调试时是关闭的,Django使用标准Python记录器中的代码来处理错误。
  • settings.py的底部有一个默认设置,当出现错误时,它会向网站管理员发送电子邮件。尼斯。它需要settings.py中的ADMINS变量中的一组电子邮件地址才能工作。
  • 默认情况下,将错误发送到STDERR而不是STDOUT,因此它们不会显示在日志中。这可以明显改变。尝试在这里,如果你想这种行为:

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

+1

Heroku的文档指出他们会同时记录stderr和stdout ......我想知道当你回答这个问题并且现在已经改变时,这是否会有所不同? HTTPS://devcenter.heroku。com/articles/logging#写入你的日志我想我可以测试它。 – 2013-02-27 01:34:32

+0

我遇到的问题不是Heroku,按我的预期工作。它与Django一样,不像Rails那样工作。 也许很明显。 – 2013-03-01 18:10:03

0

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

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

+1

嗯,那么默认的Heroku设置不会显示堆栈跟踪?谢谢,这给了我一个尝试的方向。如果富有成果,我会解释我的解决方案并接受。 – 2012-08-08 14:27:04

+1

好的,我试过使用gunicorn并设置日志记录级别进行调试。没有骰子。更新主要问题。 – 2012-08-08 15:22:43

+0

正如我发现的那样,该行为由Django使用settings.py底部的日志记录设置进行设置。起初这有点不透明,但我知道这是一个标准的Python记录器设置,因此在互联网上会有很多帮助。 – 2012-08-09 08:35:56

-3

这只是在你的settings.py文件改变你的DEBUG来解决。 DEBUG = True