day*_*mer 64 python logging warnings
当我用事件记录事件时logging.info
,它不会出现在Python终端中.
import logging
logging.info('I am info') # no output
Run Code Online (Sandbox Code Playgroud)
相反,使用logging.warn
do 记录的事件将显示在终端中.
import logging
logging.warn('I am warning') # outputs "I am warning"
Run Code Online (Sandbox Code Playgroud)
是否有环境级别的变化我可以logging.info
打印到控制台?我想避免在每个Python文件中进行更改.
Zty*_*tyx 113
根记录器始终默认为WARNING级别.试着打电话
logging.getLogger().setLevel(logging.INFO)
Run Code Online (Sandbox Code Playgroud)
你应该没事
小智 18
这会起作用
import logging
logging.basicConfig()
logger = logging.getLogger(__name__)
logger.setLevel(logging.INFO)
logger.info('its working')
Run Code Online (Sandbox Code Playgroud)
Vla*_*den 11
像@ztyx一样,默认记录器级别是警告.您必须将其设置为较低级别
您可以使用logging.basicConfig并设置记录器级别来完成此操作:
logging.basicConfig(level=logging.DEBUG)
Run Code Online (Sandbox Code Playgroud)
小智 7
上面的解决方案对我不起作用,但是这里的代码起作用了:
# 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)
Run Code Online (Sandbox Code Playgroud)
(为了便于阅读,我省略了部分代码)
在 Python 3 的最新版本(使用 Python 3.8 进行测试)中,控制台日志记录需要创建控制台处理程序才能正确显示info
消息。
以下示例是根据Python 文档中的配置日志记录示例修改的:
import logging
# create logger
logger = logging.getLogger('__name__')
level = logging.INFO
logger.setLevel(level)
# ----> console info messages require these lines <----
# create console handler and set level to debug
ch = logging.StreamHandler()
ch.setLevel(level)
# add ch to logger
logger.addHandler(ch)
# -----------------------------------------------------
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
Run Code Online (Sandbox Code Playgroud)
运行上面的代码会生成以下输出:
info message
warn message
error message
critical message
Run Code Online (Sandbox Code Playgroud)
这是没有控制台处理程序的相同代码。
import logging
# create logger
logger = logging.getLogger('__name__')
level = logging.INFO
logger.setLevel(level)
# 'application' code
logger.debug('debug message')
logger.info('info message')
logger.warning('warn message')
logger.error('error message')
logger.critical('critical message')
Run Code Online (Sandbox Code Playgroud)
如果没有控制台处理程序,输出将不包含信息消息:
warn message
error message
critical message
Run Code Online (Sandbox Code Playgroud)
我不明白为什么会这样,因为这似乎没有必要。