python logging設定level失敗

2021-08-20 20:24:39 字數 1406 閱讀 9261

一、問題描述

在用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...