python - logging.basicConfig format参数无效

有这么一段python代码python

import threading
import time
import requests
from decimal import Decimal, ROUND_DOWN
import logging
import os
import sys
import randomfrom utils import common, filter, cache
from configs import settings

logging.basicConfig(level=logging.INFO, format='%(levelname)s %(asctime)s [line:%(lineno)d]  %(message)s')

 

无论怎么设置basicConfig里的值,一直都没法生效,后来看到一个说法:在调用basicConfig函数以前,由于导入了其余包,而其余包里又导入了logging包,就致使设置basicConfig不成功。一排查,确实在common和cache包里又导入了logging。app

调整代码顺序,以下:dom

import os
import sys
import random
import threading
import time
import requests
from decimal import Decimal, ROUND_DOWN
import logging
logging.basicConfig(level=logging.INFO, format='%(levelname)s %(asctime)s [line:%(lineno)d]  %(message)s')

this_dir = os.path.abspath(os.path.dirname(__file__))
sys.path.append(os.path.join(this_dir, '..'))
from utils import common, filter, cache
from configs import settings

确实,就生效了。函数

 

经排查,“在调用basicConfig函数以前,由于导入了其余包,而其余包里又导入了logging包,就致使设置basicConfig不成功” 这个说法还不够,应该是 “在调用basicConfig函数以前,由于导入了其余包,而其余包里又导入了logging包,且也调用了basicConfig函数,就致使设置basicConfig不成功”。ui

为何呢?上 basicConfig 源码:this

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 not None:
                root.setLevel(level)
    finally:
        _releaseLock()

由于,在其余地方已经调用过了basicConfig函数,在当前文件中再调用basicConfig的时候,会发现 len(root.handlers) 的长度已经再也不为0了,因此致使不走 if len(root.handlers) == 0,因此设置的日志格式无效。spa

相关文章
相关标签/搜索