我有一個腳本,我試圖有日誌記錄各種事情(可選)到控制檯和日誌文件的選項。我還希望能夠爲日誌目標設置不同的日誌級別,即將DEBUG設置爲日誌文件,將INFO設置爲控制檯。Python的「根」日誌級別和其他處理程序的水平
我有這樣的工作已經通過啓動一個「根」記錄器,然後任選此logger內,我可以獨立地設置的日誌級別創建不同的處理程序。但是,我擔心這需要爲「根」記錄器設置儘可能低的日誌級別,即使我沒有將任何處理程序設置爲低級別,也許系統仍然會陷入一個較大的困境日誌事件的數量。爲了說明,如果我設置了logger.setLevel(logging.WARNING),然後在fileHandler或consoleHandler中嘗試使用'logging.DEBUG',我仍然只能在我的一個日誌中獲得WARNING級日誌打印目的地。這對我來說很有意義,因爲fileHandler和consoleHandler是記錄器的子對象(原諒我缺乏適當的詞彙),但是我只想確保具有儘可能低的日誌級別的「根」記錄器實際上並不實際除非處理程序實際設置爲低級別,否則請執行任何操作。
import logging
import logging.handlers
LOG_TO_STDOUT = 1
ENABLE_LOGFILE = 1
logFormatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
### DO NOT CHANGE main logger log level. This sets the lowest log level available for other loggers
logger.setLevel(logging.DEBUG)
if ENABLE_LOGFILE == 1:
fileHandler = logging.handlers.RotatingFileHandler('crisco.log', maxBytes=2000, backupCount = 5)
fileHandler.setFormatter(logFormatter)
### Set logfile log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
fileHandler.setLevel(logging.DEBUG)
logger.addHandler(fileHandler)
if LOG_TO_STDOUT == 1:
consoleHandler = logging.StreamHandler()
consoleHandler.setFormatter(logFormatter)
### Set console log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
consoleHandler.setLevel(logging.INFO)
logger.addHandler(consoleHandler)
logger.info("this message should show both in file and console")
logger.debug("this message should be in the file only")
我不確定你的意思是「儘可能低的日誌級別給我的」根「記錄器實際上沒有做任何事情」。如果這是你所害怕的,它不會在其他任何地方記錄消息。 –
是的,我知道它不會在任何其他地方記錄消息,但是我是否會因爲將根日誌記錄器設置爲DEBUG級別而在性能方面遇到問題,即使我的控制檯/文件處理程序設置得更高?或者,實際的stdout/write-to-file實際的命中和日誌記錄並不在任何地方(例如,如果兩個處理程序都設置爲INFO,則爲DEBUG消息)實際上並不會帶來很大的損失? – ericus