簡體   English   中英

python日志記錄和處理程序用法

[英]python logging and handler usage

我正在嘗試了解python日志記錄的工作方式。

我知道這是一個適用於整個運行解釋器的單例實例。

我有這個功能:

def setup_logging(options=None):
  '''setup the logger and return it'''
  logging.basicConfig(level=logging.WARNING,
                      format='%(levelname)s: %(message)s',
                      filename='/tmp/pluser.log')

  logger =  logging.getLogger('pluser')
  console = logging.StreamHandler()
  console.setLevel(logging.DEBUG)
  print(console.level)
  logger.addHandler(console)
  return logger

我稱之為使用此:

  console = setup_logging(options)

  console.debug('Initializing database')
  connect_to_db()
  console.debug('Database initialized')

(這是為將日志記錄到更多位置的准備。)

現在,“控制台”是“ logging.Logger”實例。 它具有一個StreamHandler。 該流處理程序的級別為10(即logging.DEBUG)。 但是,該StreamHandler似乎沒有得到消息,因為這些內容僅在console.warning,error或critical時打印到控制台(應該在其上帶有stderr和stdout)。

因此,我顯然缺少有關記錄器與系統或StreamHandler交互的方式的某些信息。

我的目標是要在StreamHandler的級別進行調試時,所有內容都可以打印到控制台,但我也想了解為什么它不起作用。

好的,所以在這里得到了回答: 記錄setLevel,它是如何工作的

總結一下:添加了處理程序的記錄器必須處於處理程序級別或更低的級別,否則記錄器會拒絕消息,然后再將其傳遞給處理程序。

因此,我要做的是將basicConfig的默認值設置為DEBUG,而不是WARNING。 如果然后我要添加另一個僅處理警告和以上警告的處理程序,我將這樣做,而不是將其保留為默認設置。

暫無
暫無

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

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