『无为则无心』Python日志 — 65、日志模块logging的使用
2022-03-04 17:05
766 查看
[toc]
1、logger类用法
logger类:
logger用于提供日志接口,常用于配置和发送日志消息。
我们一般使用
logging.getLogger(name)方法来获得一个
logger对象。
其中,可选参数
name指定日志器名称,默认为“root”。
常用方法包括:
logger.setLevel()
:设置日志器处理日志信息的最低级别。logger.addHandler()
:为该logger
对象添加一个handler
对象。logger.removeHandler()
:为该logger
对象添加移除一个handler
对象。logger.addFilter()
:为该logger
对象添加一个filter
对象。logger.removeFilter()
:为该logger
对象移除一个filter
对象。- 创建一个对应等级的日志记录:
logger.debug()
logger.info()
logger.warning()
logger.error()
logger.critical()
logger.log()
:获取一个日志level
参数,来创建一个日志记录。
示例:
""" logging模块是Python的内置模块,不需要安装。 """ # 导入logging模块 import logging # 创建一个日志器,就是一个logger对象 logger = logging.getLogger('logger') # 输出日志信息 logger.debug('输出debug级别的日志') logger.info('输出info级别的日志') logger.warning('输出warning级别的日志') logger.error('输出error级别的日志') logger.critical('输出critical级别的日志') """ # 右键执行代码 # 结果如下: 输出warning级别的日志 输出error级别的日志 输出critical级别的日志 """
总结:
默认情况下Python的
logging模块将日志打印到了标准输出中(控制台),且只显示了大于等于WARNING级别的日志,这说明默认的日志级别设置为WARNING。
2、handler类用法
handler类:
handler对象用于将指定的日志信息发送到指定的位置。
一个
logger对象可以添加多个
handler,每个
handler又可以定义不同日志级别,以实现日志分级过滤显示。
也就是说通过
handler我们可以将日志同时输出到多个位置。
常用的方法包括:
handler.setLevel()
:设置handler
处理的日志信息最低级别。handler.setFormatter()
:为handler
设置一个格式器对象。handler.addFilter()
:为handler
添加一个过滤器对象。handler.removeFilter()
:为handler
删除一个过滤器对象。logging.StreamHandler()
:将日志信息发送到Stream
。logging.FileHandler()
:将日志消息发送到磁盘文件。
示例:把上面的示例,实现DEBUG级别日志的输出。
""" logging模块是Python的内置模块,不需要安装。 """ # 导入logging模块 import logging # 创建一个日志器,就是一个logger对象 logger = logging.getLogger('logger') # 1.设置logger日志级别 logger.setLevel(logging.DEBUG) # 2.创建一个输出的处理器,让它输入到控制台 sh = logging.StreamHandler() # 3.把输出处理器添加到日志器中 logger.addHandler(sh) # 输出日志信息 logger.debug('输出debug级别的日志') logger.info('输出info级别的日志') logger.warning('输出warning级别的日志') logger.error('输出error级别的日志') logger.critical('输出critical级别的日志') """ # 右键执行代码 # 结果如下: 输出debug级别的日志 输出info级别的日志 输出warning级别的日志 输出error级别的日志 输出critical级别的日志 """
说明:
当我们设置好
logger日志级别后,执行代码,发现还是和上面一样,只输出了
warning级别日志。
这个时候我们是改变了
logger默认设置,就需要创建一个日志处理器
Handler,来处理输出这个自定义
logger对象的日志输出。
3、formatter类用法
formatter类:
formatter对象用来输出格式化字符串,也叫做格式器。
构造方法如下:
logging.Formatter.__init__(fmt=None, datefmt=None)
其中:
fmt:指定信息(日志)的格式化字符串,如不设定则使用信息的原始字符串。
datefmt:指定日期的格式化字符串,如不设定则使用默认格式
"%Y-%m-%d %H:%M:%S"
logging
模块中定义好的可以用于format
格式字符串说明:
字段/属性名称 | 使用格式 | 描述 |
---|---|---|
asctime |
%(asctime)s |
将日志的时间构造成可读的形式,默认情况下是‘2016-02-08 12:00:00,123’精确到毫秒。 |
name |
%(name)s |
所使用的日志器名称,默认是root,因为默认使用的是 rootLogger。 |
filename |
%(filename)s |
调用日志输出函数的模块的文件名; pathname的文件名部分,包含文件后缀。 |
funcName |
%(funcName)s |
由哪个function发出的 log, 调用日志输出函数的函数名。 |
levelname |
%(levelname)s |
日志的最终等级(被filter修改后的)。 |
message |
%(message)s |
日志信息, 日志记录的文本内容。 |
lineno |
%(lineno)d |
当前日志的行号, 调用日志输出函数的语句所在的代码行。 |
levelno |
%(levelno)s |
该日志记录的数字形式的日志级别(10, 20, 30, 40, 50)。 |
pathname |
%(pathname)s |
完整路径 ,调用日志输出函数的模块的完整路径名,可能没有。 |
process |
%(process)s |
当前进程, 进程ID。可能没有。 |
processName |
%(processName)s |
进程名称,Python 3.1新增。 |
thread |
%(thread)s |
当前线程, 线程ID。可能没有。 |
threadName |
%(thread)s |
线程名称。 |
module |
%(module)s |
调用日志输出函数的模块名,filename的名称部分,不包含后缀即不包含文件后缀的文件名。 |
created |
%(created)f |
当前时间,用UNIX标准的表示时间的浮点数表示; 日志事件发生的时间--时间戳,就是当时调用time.time()函数返回的值。 |
relativeCreated |
%(relativeCreated)d |
输出日志信息时的,自Logger创建以 来的毫秒数; 日志事件发生的时间相对于 logging模块加载时间的相对毫秒数。 |
msecs |
%(msecs)d |
日志事件发生事件的毫秒部分。logging.basicConfig()中用了参数 datefmt,将会去掉 asctime中产生的毫秒部分,可以用这个加上。 |
示例:
""" logging模块是Python的内置模块,不需要安装。 步骤: 1,定义格式器 2,把格式器输入处理器中 """ # 导入logging模块 import logging # 创建一个日志器,就是一个logger对象 logger = logging.getLogger('logger') # 设置logger输入级别 logger.setLevel(logging.DEBUG) # 1.创建日志格式器 formator = logging.Formatter(fmt="%(asctime)s [ %(filename)s ] %(lineno)d行 | [ %(levelname)s ] | [%(message)s]", datefmt="%Y/%m/%d/%X") # 创建一个输出的处理器,让它输入到控制台 sh = logging.StreamHandler() # 把输出处理器添加到日志器中 logger.addHandler(sh) # 2.给处理器添加格式器 sh.setFormatter(formator) # 输出日志信息 logger.debug('输出debug级别的日志') logger.info('输出info级别的日志') logger.warning('输出warning级别的日志') logger.error('输出error级别的日志') logger.critical('输出critical级别的日志') """ # 右键执行代码 # 结果如下: 2021/01/15/03:15:44 [ demo_log2.py ] 27行 | [ DEBUG ] | [输出debug级别的日志] 2021/01/15/03:15:44 [ demo_log2.py ] 28行 | [ INFO ] | [输出info级别的日志] 2021/01/15/03:15:44 [ demo_log2.py ] 29行 | [ WARNING ] | [输出warning级别的日志] 2021/01/15/03:15:44 [ demo_log2.py ] 30行 | [ ERROR ] | [输出error级别的日志] 2021/01/15/03:15:44 [ demo_log2.py ] 31行 | [ CRITICAL ] | [输出critical级别的日志] """
4、filter类用法
filter类:
filter是一个过滤器,可以实现比
logger和
handle更细致灵活的过滤功能。
设置只输出符合过滤条件的日志记录,提供给
Logger类和
Handler类使用。
Logger类默认过滤具有相同前缀的所有日志记录。
Logger只有在处理日志记录时即时检查
Filter,所以继承
Logger不会检查
Filter。
Handler首先注册
Filter,然后在处理后续日志记录时检查。
首先定义
logging.Filter的扩展类,并在其中实现
def filter(self, record)方法。然后创建定制
Filter类的实例,并通过
addFilter()方法附加到
Logger和
Handler。
相关文章推荐
- python日志模块logging的使用
- python2.7使用logging模块记日志,中文记入后乱码解决办法
- Python 日志模块logging使用总结
- [Python]logging模块使用basicConfig后记录日志重复问题
- Python 中 logging 日志模块在多进程环境下的使用
- python标准日志模块logging的使用方法
- python 的日志logging模块使用方法
- Python3 使用 logging 模块输出日志中的中文乱码解决办法
- python中logging日志模块的使用
- python的日志logging模块使用总结
- python标准日志模块logging的使用方法
- python的日志logging模块使用总结
- python标准日志模块logging的使用方法
- Python 中 logging 日志模块在多进程环境下的使用
- Python自带的日志模块logging的使用
- Python 中 logging 日志模块在多进程环境下的使用
- Python的日志记录-logging模块的使用
- 使用python logging 模块将日志打印到Logstash
- python中logging日志模块使用(简单配置、完成配置、多进程)
- python logging 日志模块的配置和使用