Python3 和 PyCharm - 在运行/调试中调试日志记录级别
Posted
技术标签:
【中文标题】Python3 和 PyCharm - 在运行/调试中调试日志记录级别【英文标题】:Python3 & PyCharm - Debug logging levels in run/debug 【发布时间】:2014-05-02 00:24:24 【问题描述】:我刚开始使用 PyCharm,有没有办法显示调试和信息警告?
import logging
logger = logging.getLogger('tipper')
logger.setLevel(logging.DEBUG)
logger.debug('debug message')
logger.info('info message')
logger.warn('warn message')
logger.error('error message')
logger.critical('critical message')
警告、错误、关键都显示:
/home/username/someproject/.someprojectenv/bin/python3/home/username/someproject/go.py
warn message
error message
critical message
Process finished with exit code 0
但是调试,信息不显示。
【问题讨论】:
【参考方案1】:问题与 PyCharm 无关,而与日志记录配置的工作方式有关。如果您尝试编写在普通 python 交互式会话中显示的代码,您会得到相同的输出:
>>> import logging
>>> logger = logging.getLogger('tipper')
>>> logger.setLevel(logging.DEBUG)
>>> logger.debug('debug message')
>>> logger.info('info message')
>>> logger.warn('warn message')
warn message
>>> logger.error('error message')
error message
>>> logger.critical('critical message')
critical message
问题在于设置logger
的等级还不够!您还必须向记录器添加处理程序,否则记录器将简单地将消息转发到链上。消息将最终到达root
记录器,默认情况下,该记录器的级别为logging.WARN
,因此会丢弃DEBUG
级别的消息。
但是,如果您将处理程序添加到 logger
一切正常:
>>> logger.addHandler(logging.StreamHandler())
>>> logger.debug('test')
test
您可以为每个记录器设置多个处理程序,并且每个处理程序可以具有不同的记录级别。
有关记录器和处理程序级别的更多信息,请参阅this 问题。我还建议仔细阅读 logging
模块的文档和各种指南(例如 logging
How-To,因为它具有非常高级的配置。
python3.2 中还有一个 dictConfig
函数,它允许您将日志记录层次结构指定为字典,而无需手动创建每个处理程序和记录器。
【讨论】:
@diimdeep 这是什么意思?就目前而言,您的评论不具建设性,可能会被标记和删除。如果您想以某种方式评估答案/问题的价值,您应该投票/反对它。如果您不理解答案和一些说明,或者您发现与答案相关的不同问题,您应该添加评论解释当前答案有什么问题。否则,您只需提出一个新问题。那么它是哪一个?【参考方案2】:只是为了让它运行而非常肮脏的解决方法是覆盖日志记录功能。 它可能会派上用场,有时您只是想快速浏览一下而不设置整个调试级别。
!请勿在生产中使用它!
logging.debug = print
logging.info = print
【讨论】:
很遗憾 pycharm 没有为您执行此操作的设置。我觉得它会大大改善开发体验【参考方案3】:import logging
import datetime
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s [%(levelname)8.8s] %(message)s",
handlers=[logging.StreamHandler(),
logging.FileHandler(f'log/datetime.datetime.now().isoformat().replace(":", "-").log', encoding='utf-8')],
)
logger = logging.getLogger(__name__)
广告Bakuriu 说,Python 的默认日志级别是WARNING
,否则输出只会被淹没。
补充他们的答案,还可以使用basicConfig
,如上所示。这会修改所有其他记录器继承自的 root 记录器的设置,这意味着您不必在项目的每个文件中设置 DEBUG。请注意,您导入的库也将登录此级别(除非您明确排除它们)。如果 root logger 已经初始化,这将不会执行任何操作,除非您传递 force=True
。
【讨论】:
以上是关于Python3 和 PyCharm - 在运行/调试中调试日志记录级别的主要内容,如果未能解决你的问题,请参考以下文章
pycharm下同存Python2和Python3的运行方式问题
自制进度条在python3下PyCharm中运行或在控制台按照目录运行
关于Python3的import问题(pycharm可以运行,命令行import错误)