一、問題描述
在用python開發時經常用到logging這個包,根據官方示例,如果要指定日誌級別可以寫成如下的方式。
import logging
logging.basicconfig(level=logging.info)
但是在實際應用中,這種方式有時候會設定不成功,導致無法列印出info及以下級別的日誌。一種最直接的解決方式是將這兩行**提到檔案的最前面,保證在所有其他import語句之前。示例如下。
# encoding=utf8
import logging
logging.basicconfig(level=logging.info)
# other import
import ...
# your code
if __name__ == '__main__':
pass
二、問題解釋
basicconfig函式的部分原始碼如下:
def
basicconfig
(**kwargs):
_acquirelock()
try:
if len(root.handlers) == 0:
filename = kwargs.get("filename")
if filename:
mode = kwargs.get("filemode", 'a')
hdlr = filehandler(filename, mode)
else:
stream = kwargs.get("stream")
hdlr = streamhandler(stream)
fs = kwargs.get("format", basic_format)
dfs = kwargs.get("datefmt", none)
fmt = formatter(fs, dfs)
hdlr.setformatter(fmt)
root.addhandler(hdlr)
level = kwargs.get("level")
if level is
notnone:
root.setlevel(level)
finally:
_releaselock()
在**裡首先會判斷一下root.handlers長度是否為0,如果不為0才新生成乙個hander,並設定level。
如果在**裡呼叫這個函式之前,import了其他包,並且這些包裡面也引用了logging這個包,就可能導致設定不成功。
logging包的預設日誌級別為logging.unset,在這個日誌級別只會列印warn及以上級別的日誌。
python logging日誌設定
log等級,輸出格式,輸出檔名,檔案讀寫模式 logging.basicconfig level logging.debug,format asctime s filename s line lineno d levelname s message s filename log.txt filemo...
python logging 最佳實踐
建立乙個logger,這裡的級別debug是總開關,控制了下面file 和console handler的級別 logger logging.getlogger logger.setlevel logging.debug 建立乙個handler,用於寫入日誌檔案,並定義輸出格式 fh logging...
Python logging模組學習
import logging 日誌級別列表,預設為logging.warning levels logging.notset,logging.debug,logging.info,logging.warning,logging.error,logging.critical log format as...