簡體   English   中英

無論級別設置如何如何始終將日志消息寫入文件

[英]How to always write log message to file regardless of level setting

我目前使用日志記錄模塊在腳本中實現了安靜模式,如下所示:

quiet = False # set quiet using cmdline arguments
logging.basicConfig(level=logging.WARNING if quiet else logging.INFO)
logger = logging.getLogger('logger')
my_file_handler = logging.FileHandler('file_name')
logger.addHandler(self.file)

使用上面的代碼,我得到了想要篩選的輸出,以及以非安靜模式提交的文件,例如:

logger.debug('want to show every time in file, but never to console')
logger.info('always in file, but only show in console if not quiet')
logger.warning('Show in both file and console, EVERY TIME') 

但是,如果打開安靜模式,則屏幕和文件都不會得到任何輸出。 我希望日志文件中的所有內容都不管它是否安靜,但僅在非安靜模式下才打印到屏幕上(基本上,無論記錄級別如何,始終寫入文件,而是根據記錄級別打印)。

請告訴我該怎么做。

編輯:

我針對每個級別的差異對所需行為做了更清晰的帖子。 thisthis提供的答案中,設置FileHandler級別對我來說似乎無濟於事,因為我一直想將調試級別信息寫入文件。

quiet = False # set quiet using cmdline arguments
logging.basicConfig(level=logging.WARNING if quiet else logging.INFO)
logger = logging.getLogger('logger')
my_file_handler = logging.FileHandler('file_name')
my_file_handler.setLevel(logging.DEBUG)       # added setLevel
logger.addHandler(self.file)

logger.debug('abcde')     # this doesn't show in file or console as my basicConfig
                          # is logging.INFO
                          # But i WANT it to

您僅需要在處理程序上進行級別控制,而無需在記錄器上進行級別控制。 所以:

  1. 將記錄器級別設置為所需的最低級別(例如INFO )。
  2. 將控制台處理程序( StreamHandler )級別設置為quiet指示的級別。
  3. 不要在FileHandler上設置一個級別,這樣它將處理記錄器傳遞的所有消息。

您不能basicConfig()使用basicConfig() (它僅在根記錄器上設置級別,而不在處理程序上設置級別)-使用dictConfig()或使用API​​調用( addHandlersetLevel等)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM