一、logging的说明
1、日志功能
跟踪软件的运行情况,记录执行过程,按不同级别显示;
2、日志的级别
logging提供了一组便利的函数,用来做简单的日志,它们是debug()、info()、warning()、error()和critical()。
默认等级是warning,这意味着仅仅这个等级及以上的才会被反馈信息,除非logging模块被用来做其他事情。
等级顺序:critical>error>warning>info>debug;
级别 | 何时使用 |
debug | 详细信息,一般只在调试问题时使用 |
info | 证明事情按预期工作 |
warning | 某些没有预料到的事情的提示,或者在将来可能出现的问题提示,例如:磁盘空间不足,但是软件还是会照常运行; |
error | 由于更严重的问题,软件已不能执行一些功能了 |
critical | 严重错误,表明软件已不能继续运行了。 |
二、logging的使用
1、在pytest.ini 定义logging的级别
pytest是从pytest.ini中读取log_cli配置的,默认是关闭的,所以首先要设置pytest.ini文件;
[pytest]
log_cli = true
log_cli_level = INFO
log_format = %(asctime)s (%(filename)-16s:%(lineno)-3s) %(levelname)-8s %(message)s
log_date_format = %Y-%M-%D %H:%M:%S
2、具体应用
import pytest
import logging
log = logging.getLogger(__name__)
def test_logger():
log.debug("This is debug message")
log.debug("This is info message")
log.debug("This is warning message")
三、详细解析
1、loggers
loggers 就是程序可以直接调用的一个日志接口,可以直接向logger写入日志信息。logger并不是直接实例化使用的,而是通过logging.getLogger(__name__)来获取对象,事实上logger对象是单例模式。logging是多线程安全的,也就是无论程序中哪里需要打日志获取到的logger对象都是同一个。但是logger并不支持多线程。
2、四大组件
组件名称 | 组件 | 说明 |
日志器 | loggers | 提供应用程序代码直接使用的接口 |
处理器 | handlers | 用于将日志记录发送到指定的目的位置 |
过滤器 | filters | 提供更细粒度的日志过滤功能, 用于决定哪些日志记录将会被输出(其它的日志记录将会被忽略) |
格式器 | formatters | 用于控制日志信息的最终输出格式 |
3、各个组件之间的关系
- 日志器(logger)需要通过处理器(handler)将日志信息输出到目标位置,如:文件、sys.stdout、网络等;
- 不同的处理器(handler)可以将日志输出到不同的位置;
- 日志器(logger)可以设置多个处理器(handler)将同一条日志记录输出到不同的位置;
- 每个处理器(handler)都可以设置自己的过滤器(filter)实现日志过滤,从而只保留感兴趣的日志;
- 每个处理器(handler)都可以设置自己的格式器(formatter)实现同一条日志以不同的格式输出到不同的地方。
简单点说就是:日志器(logger)是入口,真正干活儿的是处理器(handler),处理器(handler)还可以通过过滤器(filter)和格式器(formatter)对要输出的日志内容做过滤和格式化等处理操作。