今天在调程序的时候就遇到了上述问题,先猜一下下边两段代码的运行结果?有没有“日志级别”打印出来?:

logging.basicConfig(

format='[%(processName)s-%(process)d] [%(filename)s:%(lineno)s] %(message)s',

level=logging.DEBUG,

datefmt='%Y-%m-%d %H:%M:%S'

)

logging.basicConfig(

format='%(levelname)7s [%(processName)s-%(process)d] [%(filename)s:%(lineno)s] %(message)s',

level=logging.DEBUG,

datefmt='%Y-%m-%d %H:%M:%S'

)

在测试之前,按照惯性思维去想,结果应该是会有“日志级别”输出吧?毕竟后边的赋值会覆盖前边的赋值,但真实结果却是:

[MainProcess-23556] [t.py:37] sd

[MainProcess-23556] [t.py:24] operator

并没有输出“日志级别”!为什么呢?经过一番百度,在官网的文档中找到了答案:

原来只会以第一次的赋值为准啊!除非使用 force 参数,再来试一把 force 参数:

logging.basicConfig(

format='[%(processName)s-%(process)d] [%(filename)s:%(lineno)s] %(message)s',

level=logging.DEBUG,

datefmt='%Y-%m-%d %H:%M:%S'

)

logging.basicConfig(

format='%(levelname)7s [%(processName)s-%(process)d] [%(filename)s:%(lineno)s] %(message)s',

level=logging.DEBUG,

datefmt='%Y-%m-%d %H:%M:%S',

force=True

)

这次结果就是后边的一种格式了:

INFO [MainProcess-23633] [t.py:38] sd

INFO [MainProcess-23633] [t.py:25] operator

为什么会这样设计呢?

看一下上述官方文档所在章节就知道了:

原来是为了线程安全啊!

Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐