在其他一些技術中,我們偶爾會使用低於DEBUG的日誌級別,我相信這被稱爲「冗長」。我意識到這樣一個級別的需求是非常主觀的。但是在我看來,只有INFO和DEBUG是不夠的。我們有時候需要記錄非常垃圾的東西(比調試更垃圾)。實際上,我們會在沒有打開的情況下生成內部版本,但在少數情況下,我們會在某些QA設置中安裝產品並追蹤錯誤等後啓用此級別的日誌記錄。Python日誌記錄 - 在DEBUG下面有什麼東西嗎?
是否有任何使用標準的python日誌庫來記錄DEBUG級別以下的東西(簡單或其他方式)?
在temp.py文件,我可以做到以下幾點:
logging.addLevelName(5,"verbose")
VERBOSE = 5
logger = logging.getLogger("foo")
logger.setLevel(VERBOSE)
logger.log(VERBOSE,"blah!")
這工作,當我我的IDE中運行temp.py(和日誌到標準輸出),但我們真正的守護程序使用標準的文件/字典配置語法來設置日誌記錄,我沒有看到任何方式表明守護程序應該使用5級。
我在追逐那些不可行的東西嗎?
對於那些可能想知道爲什麼我需要比DEBUG更低的東西的人,偶爾會遇到偶爾出現的日誌類型(可能是內部循環),即使在DEBUG中我通常也不會看到它。在某些生產系統上,可能會有一段時間啓用它,而無需向源代碼添加更多日誌記錄並重新部署等。
EDIT1 - 顯然,日誌記錄庫允許自定義級別。由於DEBUG是10級,因此1..9範圍內有空間。如果我定義了自定義級別(例如上面的示例代碼),我想我真正的問題是如何從json日誌配置文件啓用該級別的日誌記錄?
EDIT2 - 下,如果它是不是事實,我們需要/使用JSON配置文件(即我不能改變的要求)會工作:
import logging
logging.basicConfig(filename='example.log',level=5)
VERBOSE = 5
logging.addLevelName(5,"verbose")
logger = logging.getLogger("bar")
logger.log(VERBOSE,"blah!")
EDIT3 - 想通了...致電
logging.addLevelName(5,"VERBOSE")
是至關重要的。我只是沒有在正確的地方。在我的情況下,我只需要使上述調用之前調用日誌庫dictConfig(...)調用。當我這樣做後,我就可以進入我們的日誌配置文件,並將事件(在文件處理程序和根目錄上)壓縮到VERBOSE,並且它工作。
當然,因爲你調用日誌語句本身不完全是優雅:
self.logger.log(VERBOSE,"Something very spammy")
而不是
self.logger.verbose("Something very spammy")
但我真的不想修改任何記錄庫代碼(被在那裏,做到這一點,有T恤)。
謝謝大家!
對於那些誰覺得沒什麼低於需要DEBUG,更多的權力給你:)
「......有助於一段時間......」聽起來*完全*像'DEBUG'一樣。 – 2012-01-28 04:35:55
是的,其中一些歸結爲對DEBUG意味着什麼與INFO等的主觀解釋。我不會將日誌DEBUG語句放在可以執行數百次的內部循環中。但在過去的公司中,我偶爾會在這樣一個循環中放入一個「詳細」的日誌語句。我理解你的觀點。 – 2012-01-28 04:38:33
ISTM日誌記錄的設計是將日誌記錄調用放在任何可能需要的地方,然後通過過濾器或報告一次設置來抑制高音量。 – 2012-01-28 04:45:54