跳转到主要内容

Python的logging模块的详细日志级别

项目描述

https://travis-ci.org/xolox/python-verboselogs.svg?branch=master https://coveralls.io/repos/xolox/python-verboselogs/badge.png?branch=master

verboselogs软件包扩展了Python的logging模块,增加了日志级别NOTICESPAMSUCCESSVERBOSE

  • NOTICE级别位于预定义的WARNING和INFO级别之间。

  • SPAM级别位于预定义的DEBUG和NOTSET级别之间。

  • SUCCESS级别位于预定义的WARNING和ERROR级别之间。

  • VERBOSE级别位于预定义的INFO和DEBUG级别之间。

执行此操作的代码简单且简短,但我仍不想将其复制/粘贴到我在工作的每个项目中,因此有了这个软件包。它目前已在Python 2.6、2.7、3.4、3.5、3.6和PyPy上进行测试。

安装

verboselogs软件包可在PyPI上找到,这意味着安装应该像这样简单

$ pip install verboselogs

实际上有各种各样的方式来安装Python包(例如,用户的site-packages目录虚拟环境或者直接全局安装),我并没有在这里深入讨论这个话题的意图,所以如果你感到害怕,请在回到这些说明之前先了解一下你的选项;:-)。

用法

开始使用verboselogs包非常简单

>>> import logging, verboselogs
>>> logger = verboselogs.VerboseLogger('verbose-demo')
>>> logger.addHandler(logging.StreamHandler())
>>> logger.setLevel(logging.VERBOSE)
>>> logger.verbose("Can we have verbose logging? %s", "Yes we can!")

以下是一个带有命令行界面和可配置日志的非常简单的Python程序框架

"""
Usage: demo.py [OPTIONS]

This is the usage message of demo.py. Usually
this text explains how to use the program.

Supported options:
  -v, --verbose  make more noise
  -h, --help     show this message and exit
"""

import getopt
import logging
import sys
import verboselogs

logger = verboselogs.VerboseLogger('demo')
logger.addHandler(logging.StreamHandler())
logger.setLevel(logging.INFO)

# Command line option defaults.
verbosity = 0

# Parse command line options.
opts, args = getopt.getopt(sys.argv[1:], 'vqh', ['verbose', 'quiet', 'help'])

# Map command line options to variables.
for option, argument in opts:
    if option in ('-v', '--verbose'):
        verbosity += 1
    elif option in ('-q', '--quiet'):
        verbosity -= 1
    elif option in ('-h', '--help'):
        print __doc__.strip()
        sys.exit(0)
    else:
        assert False, "Unhandled option!"

# Configure logger for requested verbosity.
if verbosity >= 4:
    logger.setLevel(logging.SPAM)
elif verbosity >= 3:
    logger.setLevel(logging.DEBUG)
elif verbosity >= 2:
    logger.setLevel(logging.VERBOSE)
elif verbosity >= 1:
    logger.setLevel(logging.NOTICE)
elif verbosity < 0:
    logger.setLevel(logging.WARNING)

# Your code goes here.
...

如果你想将VerboseLogger设置为所有后续日志实例的默认日志类,你可以使用verboselogs.install()来实现

import logging
import verboselogs

verboselogs.install()
logger = logging.getLogger(__name__) # will be a VerboseLogger instance

Pylint插件

如果你使用上述verboselogs.install()方法,那么Pylint可能无法足够智能地识别logging正在使用verboselogs,从而导致诸如以下错误

E:285,24: Module 'logging' has no 'VERBOSE' member (no-member)
E:375,12: Instance of 'RootLogger' has no 'verbose' member (no-member)

为了解决这个问题,verboselogs提供了一个Pylint插件verboselogs.pylint,当使用pylint --load-plugins verboselogs.pylint加载时,会将verboselogs方法和常量添加到Pylint对logging模块的理解中。

日志级别概述

下表显示了预定义的日志级别和由本包定义的VERBOSE、NOTICE和SPAM级别的名称、数值描述,以及我添加的一些注释。

级别

描述

注释

NOTSET

0

当创建日志记录器时,级别设置为NOTSET(请注意,根日志记录器是以WARNING级别创建的)。

此级别不打算被显式使用,但是当日志记录器的级别设置为NOTSET时,其有效级别将从父日志记录器继承。

SPAM

5

对于常规调试来说太详细了,但在某人深夜调试时感到绝望并决定需要尽可能多的工具时很有用!:-)

DEBUG

10

详细的信息,通常仅在诊断问题时才感兴趣。

通常在此级别,日志输出非常低级,对于不了解软件内部的人来说并不有用。

VERBOSE

15

详细的信息,应能被有经验的用户理解,以提供对软件行为的洞察;这是一种高级调试信息。

INFO

20

确认事情正在按预期工作。

NOTICE

25

有关具有多个成功路径或可能需要撤销的操作的审计信息。

WARNING

30

表示发生了意外的情况,或可能在未来出现一些问题(例如“磁盘空间低”)。软件仍然按预期工作。

SUCCESS

35

非常明确的成功确认。

ERROR

40

由于更严重的问题,软件无法执行某些功能。

CRITICAL

50

严重错误,表示程序本身可能无法继续运行。

联系方式

verboselogs的最新版本可在PyPIGitHub上找到。文档托管在Read the Docs。有关错误报告,请在GitHub上创建一个问题。如果你有任何问题、建议等,请随时通过peter@peterodding.com给我发电子邮件。

许可证

本软件遵循 MIT 许可协议 许可。

© 2017 Peter Odding.

下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源代码分发

verboselogs-1.7.tar.gz (10.3 kB 查看哈希值)

上传时间 源代码

构建分发

verboselogs-1.7-py2.py3-none-any.whl (11.9 kB 查看哈希值)

上传时间 Python 2 Python 3

支持者