2012-08-08 61 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