2013-12-15 89 views
1

我取而代之的是一個包羅萬象的記錄器的所有記錄在我的日誌記錄的conf在Django的設置,如:Django的記錄 - 回溯不傳播

'loggers': { 
    '': { 
     'handlers': ['console'], 
     'level': 'DEBUG' 
    } 
} 

所以我猜,結果將是完全一樣具有'django'記錄器具有相同的設置。但是我沒有看到所引發的錯誤堆棧跟蹤(特別是在問題上),使用上面的「全部捕獲」配置。

儘管它打印一次OK,如果我補充一下:

'django': { 
    'handlers': ['null'], 
    'propagate': True 
}, 

看來,'django'記錄某種程度上確實增加回溯到日誌的工作嗎?

但無論如何,事情的行爲原因是什麼?爲什麼添加第二個代碼片段時事情會改變?在我看來,有一部分我不知道的故事。

(Django的1.5)

回答

1

我可以看到這種情況發生的唯一原因是,propagation屬性設置爲False在默認情況下django和/或django.requests記錄器,和你指定它明確地覆蓋這個。在Django 1.5中,與早期版本相比,您的settings.py中指定的配置可以與Django的默認值合併,如here所述。

除非有特定原因覆蓋默認值True,否則一般不要單獨傳播。 Django自己的配置有時會在配置中明確指定True,除了記錄無論如何會發生什麼之外,IMO不起任何作用。

您需要顯示您正在使用的特定1.5版本Django的完整配置,以確定您看到的行爲的確切原因。

0

試試這個在settings.py設置一個包羅萬象的記錄:

LOGGING = { 
    'version': 1, 
    'root': {'level': 'DEBUG'} 
} 

沒有看到你的全LOGGING設置它不可能是肯定的,但這裏是我對所發生的事情的猜測。我不認爲名爲''的空字符串實際上是作爲根記錄器工作的;它可能無能爲力。另外,因爲你的設置沒有與Django的合併,所以'console'處理程序不會被定義。 如果使用記錄器,我期望它會拋出一個錯誤,如AttributeError: 'str' object has no attribute 'level'。與'null'處理程序一樣。

但是,當您添加「Django的記錄它確實對應Django的實際使用記錄儀和propagate設置生效冒泡到本機根記錄器,默認情況下打印到sys.stderr。根據定義,雖然根記錄器捕捉所有的東西,所以你不應該特別命名'django'記錄器。再次,您完整的LOGGING設置中可能存在衝突。