数据蛙就业班

python logging模块学习

2020-04-01  本文已影响0人  卅清

logging模块当中,记录到log的信息等级划分:从低到高

调试(debug)、信息(info)、警告(warning)、错误(error)和严重错误(critical)

logging模块提供了两种记录日志的方式:

第一种:使用logging提供的模块级别的函数,默认级别是warning

使用logging的basicConfig函数能够进行一些常用的设置,如日志等级,输入信息,日志文件路径等。

logging.basicConfig()函数参数说明

filename 指定日志输出目标文件的文件名(可以写文件名也可以写文件的完整的绝对路径,写文件名日志放执行文件目录下,写完整路径按照完整路径生成日志文件),指定该设置项后日志信心就不会被输出到控制台了

filemode 指定日志文件的打开模式,默认为'a'。需要注意的是,该选项要在filename指定时才有效

format 指定日志格式字符串,即指定日志输出时所包含的字段信息以及它们的顺序。logging模块定义的格式字段下面会列出。

datefmt 指定日期/时间格式。需要注意的是,该选项要在format中包含时间字段%(asctime)s时才有效

level 指定日志器的日志级别

stream 指定日志输出目标stream,如sys.stdout、sys.stderr以及网络stream。需要说明的是,stream和filename不能同时提供,否则会引发 ValueError异常

style  Python 3.2中新添加的配置项。指定format格式字符串的风格,可取值为'%'、'{'和'$',默认为'%'

handlers Python 3.3中新添加的配置项。该选项如果被指定,它应该是一个创建了多个Handler的可迭代对象,这些handler将会被添加到root logger。需要说明的是:filename、stream和handlers这三个配置项只能有一个存在,不能同时出现2个或3个,否则会引发ValueError异常。

相关文档中,关于format信息格式如下

import logging

logging.basicConfig(level=logging.INFO,format=' %(name)s|%(asctime)s|%(levelname)s|%(message)s',filename=r'./test.log')

logging.info('lalalla')

第二种:日志流处理流程

import logging

logging.basicConfig(level=logging.INFO,format=' %(name)s|%(asctime)s|%(levelname)s|%(message)s',

filename=r'./test.log')

logging.info('lalalla')

logging.basicConfig(level=logging.INFO,format=' %(name)s|%(asctime)s|%(levelname)s|%(message)s',

filename=r'./test1.log')

logging.info('lalalla111111111')

可看到,一次指定两个log存储文件时,有一个是失效的,并且信息都输入到第一个指定的log文件中。所以需要使用logging.getLogger([name]).没有指定名字将返回root logger

日志模块四大组件

日志器Logger  

提供了应用程序可一直使用的接口,记录产生的日志。

处理器Handler  

将logger创建的日志记录发送到合适的目的输出,日志器logger进行设置,不同的处理器(handler)可以将日志输出到不同的位置,

过滤器Filter  

每个处理器(handler)都可以设置自己的过滤器(filter)实现日志过滤,决定输出哪条日志记录,丢弃哪条日志记录

格式器Formatter   

 决定日志记录的最终输出格式,每个处理器(handler)都可以设置自己的格式器(formatter)实现同一条日志以不同的格式输出到不同的地方。

日志大概流程:logger记录器产生的日志记录通过Handler处理器,发送到合适位置,filter过滤器决定输出那些记录,丢弃哪条日志记录,formatter 格式化器指明输出日志内容的格式布局。

四大组件对应的四大类Logger, Handler, Filter, Formatter

Logger类:

暴露方法,记录程序运行时产生的日志信息;过滤设置,决定要对哪些日志进行后续处理;将日志消息传送给所有设置好的日志handlers。

logger = logging.getLogger(log_filename),多次调用getLogger()方法,但log_filename参数相同,将会返回指向同一个logger对象的引用。

常用配置方法:

Logger.setLevel()    设置日志器将会处理的日志消息的最低严重级别,默认是warning,如果需要更低等级的日志信息,需要进行设置。不然后面handler设置成info或者debug也是没有日志记录的。

Logger.addHandler() 和 Logger.removeHandler()      为该logger对象添加 和 移除一个handler对象

Logger.addFilter() 和 Logger.removeFilter()    为该logger对象添加 和 移除一个filter对象

Handler类

指定日志信息的分发目的,是输入到控制台,还是输入到文件中等等。

Handler.setLevel(lel):指定被处理的信息级别,低于lel级别的信息将被忽略,logger中低于此级别的日志信息也不会输出指定目的。

Handler.setFormatter():给这个handler选择一个格式

Handler.addFilter(filt)、Handler.removeFilter(filt):新增或删除一个filter对象

formater类

logging.Formatter.__init__(fmt=None, datefmt=None, style='%')

fmt:指定消息格式化字符串,如果不指定该参数则默认使用message的原始值

datefmt:指定日期格式字符串,如果不指定该参数则默认使用"%Y-%m-%d %H:%M:%S"

style:Python 3.2新增的参数,可取值为 '%', '{'和 '$',如果不指定该参数则默认使用'%'

Filter类

Filter可以被Handler和Logger用来做比level更细粒度的、更复杂的过滤功能。Filter是一个过滤器基类,它只允许某个logger层级下的日志事件通过过滤。该类定义如下:

classlogging.Filter(name='')    

        filter(record)

Filter类详情实例可参考:https://www.jb51.net/article/177134.htm

参考:https://www.cnblogs.com/yyds/p/6901864.html

上一篇下一篇

猜你喜欢

热点阅读