一、简介
python 的日志模块是 logging,属于标准库,无需安装,使用时直接导入即可。logging 模块包括 Loggers(日志记录器)、Handlers(日志处理器)、Filters(日志过滤器)和 Formatters(日志格式化器)配置文件。
Logger记录器:应用程序代码能直接调用日志接口,最常用的操作有两类:配置和发送日志消息
handler处理器:将(记录器产生的)日志记录(log record)发送至合适的目的地(destination )常用的是StreamHandler和FileHandler,可以简单理解为一个是console和文件日志,一个打印在调试窗口上,一个记录在一个文件上
filter过滤器:提供了更好的粒度控制,它可以决定输出哪些日志记录。
formatter格式化器:指明了最终输出中日志记录的布局。指定日志记录输出的具体格式。工作中常用的格式:fmt = logging.Formatter('%(asctime)s -【%(filename)s-->line:%(lineno)d】-%(levelname)s:%(message)s')
日志收集流程图解
二、logging模块日志级别介绍
日志一共分成5个登记,从低到高分别是:
1、DEBUG:输出详细的运行情况,主要用于调试
2、INFO:确认一切按预期运行,一般用于输出重要运行情况
3、WARNING:一些意想不到的事情发生了(比如:“警告:内存空间不足”)但是这个软件还能按预期工作,在不久的将来会出现问题
4、ERROR:发生了错误,软件没能执行一些功能,还可以继续执行
5、CRIICAL:一个严重的错误,表明程序本身可能无法继续运行
这5个等级,也分别对应5种打日子的方法:debug、info、warning、error、critical。默认的是WARNING级别的日志,当在WARNING或之上的等级才能被记录
三、日志输出渠道
有两种方式记录跟踪,一种输出控制台,另一种是记录到文件中,如日志文件
Handler处理器常用的是 StreamHandler 和 FileHandler,可以简单理解为一个是console,一个是文件日志,一个打印在调试窗口上,一个记录在一个文件上
1、输出到控制台
由 getLogger() 的源码可知,获取 logger 对象,创建日志收集器时,可以传一个参数给收集器命名,就会得到一个自定义的日志收集器;若没有传参数则得到的是默认收集器 root,收集的等级是WARNING等级及以上的日志;这个参数可传可不传,传了得到的就是自定义的收集器,不传得到的就是默认的收集器
2、输出到文件中
此时控制台打印的数据为空,在python左侧的列表页会在相应的目录下生成一个log.txt的文件,可以在文件中查看日志
四、日志输出格式
可以通过logging.Formatter 指定日志输出的格式,这个参数可以输出很多有用的信息,如下:
%(name)s:收集器名称
%(levelno)s:打印日志级别的数值
%(levelname)s:打印日志级别名称
%(pathname)s:打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s:打印当前执行程序名
%(funcName)s:打印日志的当前函数
%(lineno)d:打印日志的当前行号
%(asctime)s:打印日志的时间
%(thread)d:打印线程ID
%(threadName)s:打印线程名称
%(process)d:打印进程ID
%(message)s:打印日志信息
在工作中常用的格式如下:
fmt = logging.Formatter('%(asctime)s -【%(filename)s-->line:%(lineno)d】-%(levelname)s:%(message)s')
这个格式可以输出日志的打印时间、是哪个模块的哪一行输出的、输出的日子级别是什么以及输出的日志内容