我做了一些搜索,但我想知道是否有人有一個日誌記錄配置的片段來讓Django只輸出堆棧跟蹤到stdout(所以我可以在終端窗口中看到它),當它在請求期間遇到錯誤。這是專門爲本地開發/調試,主要用於當我做AJAX發佈請求時,我不得不看看Firebug中的HTML來找出發生錯誤的行。在使用manage.py運行服務器時在Django中輸出堆棧跟蹤到stdout
回答
您可以創建一箇中間件來執行此操作。這裏有一個修改的摘錄我使用的一個項目:
class ExceptionLoggingMiddleware(object):
def process_exception(self, request, exception):
import traceback
print traceback.format_exc()
將這個處理程序中的Django的設置,您的中間件的一部分。
子類WSGI處理程序,根據您定義的handle_uncaught_exception
中的回溯執行任何操作,並在部署時使用WSGIHandler而不是由django提供的。
import traceback
from django.core.handlers.wsgi import WSGIHandler
class MyWSGIHandler(WSGIHandler):
"""WSGI Handler which prints traceback to stderr"""
def handle_uncaught_exception(self, request, resolver, exc_info):
traceback.print_tb(exc_info[2], file=sys.stderr)
return super(WSGIHandler, self).handle_uncaught_exception(request, resolver, exc_info)
使用的Apache/mod_wsgi的,應在Apache的錯誤日誌
另一種方法是用測井寫回溯。
LOGGING = {
'version': 1,
'handlers': {
'console':{
'level':'DEBUG',
'class':'logging.StreamHandler',
},
},
'loggers': {
'django.request': {
'handlers':['console'],
'propagate': True,
'level':'DEBUG',
}
},
}
這句法來自Django文檔Configuring Logging,並且可以進一步修改以增加或減少控制檯 - 量:具體來說,你通過添加以下到settings.py文件運行時./manage.py runserver
得到一個堆棧跟蹤日誌記錄。
另外,5XX響應被升高爲錯誤消息和4XX響應升高作爲警告消息。
請注意,這個問題&答案有2013重複here。
這應該是我認爲的首選方法。你有更多的控制權,你想使用什麼記錄器,你想記錄什麼等。 – Andre 2014-05-27 03:10:09
我有類似的問題,但中間件選項並沒有幫助我。原因是我使用的是django-jsonview 0.4.3,它提供了一個裝飾器,可以將字典轉換爲有效的json http響應,即使裝飾函數失敗,也不會調用process_exception中間件方法。我檢查這個裝飾的代碼和它似乎試圖登錄錯誤這樣做:
...
except Exception as e:
logger = logging.getLogger('django.request')
logger.exception(unicode(e))
不過,我不知道爲什麼,這是行不通的,並沒有什麼記錄在我的bash控制檯。我應該找出爲什麼會發生這種情況。同時,我使用一個額外的裝飾:
def log_errors(func):
if not settings.DEBUG:
return func
def wrapper(request, *args, **kwargs):
try:
return func(request, *args, **kwargs)
except:
print traceback.format_exc()
return wrapper
然後,在我所有的JSON的觀點:
@json_view
@log_errors
def my_view(request):
....
我通常使用這樣的:
except Exception,e:
# Get line
trace=traceback.extract_tb(sys.exc_info()[2])
# Add the event to the log
output ="Error in the server: %s.\n" % (e)
output+="\tTraceback is:\n"
for (file,linenumber,affected,line) in trace:
output+="\t> Error at function %s\n" % (affected)
output+="\t At: %s:%s\n" % (file,linenumber)
output+="\t Source: %s\n" % (line)
output+="\t> Exception: %s\n" % (e)
然後我用「輸出「,無論我需要什麼:打印到標準輸出,發送電子郵件等...
這是st範圍內沒有人提到DEBUG_PROPAGATE_EXCEPTIONS
設置。它不是用於生產,而是在測試/調試環境中使用非常簡單。只需添加到settings.py
:
DEBUG_PROPAGATE_EXCEPTIONS = True
- 1. 在使用IIS時在Django中的錯誤上打印堆棧跟蹤stdout
- 2. Django:如何獲取堆棧跟蹤運行時警告
- 3. Web服務客戶端堆棧跟蹤
- 4. 如何在java中打印堆棧跟蹤到stdout進行調試?
- 5. CryptographicException在堆棧跟蹤
- 6. 使用CORBA時打印堆棧跟蹤
- 7. 如何在出現故障時執行堆棧跟蹤?
- 8. 異常(堆棧跟蹤)在一行
- 9. 運行時錯誤堆棧跟蹤或VB6中的位置
- 10. Junit的Ant任務,輸出堆棧跟蹤
- 11. 在Silverlight中重新拋出異常時保留堆棧跟蹤
- 12. 在Gunicorn超時轉儲Django堆棧跟蹤
- 13. VB6中的堆棧跟蹤
- 14. eclipse中的堆棧跟蹤
- 15. 在堆棧跟蹤中捕獲FileNotFound?
- 16. 在Perl中獲取堆棧跟蹤?
- 17. Rails 3:如何在服務器日誌中顯示500條內部服務器錯誤時的堆棧跟蹤?
- 18. 堆棧跟蹤中的行號
- 19. 服務堆棧:從路由到運行
- 20. 當您在堆棧中使用SDK類在Eclipse中獲取堆棧跟蹤時,如何看到SDK源?
- 21. java堆棧跟蹤分析,什麼線程正在運行
- 22. 是否有跟蹤服務方法調用的C#類,如堆棧跟蹤
- 23. 如何在java中添加堆棧跟蹤到我的調試打印輸出
- 24. 如何通過SBT運行規格時消除堆棧跟蹤?
- 25. 如何在IBM Mobile First中啓用Rest服務器的服務器堆棧跟蹤8
- 26. 正確使用堆棧跟蹤調試
- 27. 使用cx_freeze獲取Python堆棧跟蹤
- 28. android使用proguard,堆棧跟蹤?
- 29. Dart BrowserClient在導入時拋出堆棧跟蹤
- 30. C++堆棧跟蹤問題
「Terminal Window」?你正在運行'django-admin.py runserver'? – 2011-05-04 15:56:05
是的,'manage.py runserver'在本地,但是這對生產也是有幫助的,儘管我收到了郵件,所以沒有問題。 – Bialecki 2011-05-04 16:05:37
「生產」方法取決於您如何與Apache集成,因此您需要提供有關該配置的更多細節以確保我們理解。 – 2011-05-04 16:08:42