logging.info不会显示在控制台上,但会发出警告和错误提示


94

当我使用记录事件时logging.info,该事件不会出现在Python终端中。

import logging
logging.info('I am info')  # no output

相反,使用记录的事件logging.warn确实出现在终端中。

import logging
logging.warn('I am warning')  # outputs "I am warning"

我可以logging.info在控制台上进行环境级别更改吗?我想避免在每个Python文件中进行更改。

Answers:


157

根记录器始终默认为“警告”级别。尝试致电

logging.getLogger().setLevel(logging.INFO)

你应该没事的


1
不,您只需调用一次即可。记录器按层次结构构建,所有记录都归结为根记录器。通过不指定的任何参数getLogger(),它将返回根记录器。只要您不修改其他记录器,只需修改根记录器。
Ztyx

18
您知道为什么logging.basicConfig(level = logging.INFO)不起作用吗?我在文档中看不清。
Doppelganger

1
@ P1h3r1e3d13如果您只有一个可能是最佳实践的root记录器,那么可以。
Ztyx

7
这在Python 3.5上不起作用:Python 3.5.2 (default, Nov 12 2018, 13:43:14) [GCC 5.4.0 20160609] on linux >>> import logging >>> rootLog = logging.getLogger() >>> rootLog.setLevel(logging.INFO) >>> rootLog.info('all the kings horses') >>> rootLog.warning('all the kings men') all the kings men
Jeff K,

6
@jeffk,与我相同3.6.8不打印,即使setLevel设置为logging.INFO信息消息
罗伯特Lugg填入


17

上面的解决方案对我不起作用,但是这里的代码起作用了:

# set up logging to file
logging.basicConfig(level=logging.DEBUG,
                    format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                    datefmt='%m-%d %H:%M',
                    filename='/temp/myapp.log',
                    filemode='w')
# define a Handler which writes INFO messages or higher to the sys.stderr
console = logging.StreamHandler()
console.setLevel(logging.INFO)
# add the handler to the root logger
logging.getLogger('').addHandler(console)

(为了便于阅读,我省略了代码的一部分)


1
这是唯一对我有用的东西。我有一行,logging.error("Connection timed out!")即使在level=logging.DEBUG中也有一行basicConfig(),它不会打印到控制台。添加了处理程序,非常感谢!
BruceWayne

请记住,您正在使用的处理程序正在扮演角色。例如,如果您的代码具有NullHandler,则无论记录杆如何,都不会打印任何内容。
乔治,

同样在这里-如果我省略了level参数basicConfig或将其设置在INFO之上,则控制台记录器将永远不会记录任何内容。如果我不参加,basicConfig那么我可以setLevel整天调用记录器(并且我可以通过调用来查看级别变化getEffectiveLevel),但是它永远不会记录低于WARNING级别的任何内容。我实际上不确定那不是正确的行为,但不是我所期望的。
Hal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.