python日志库
python中用作记录日记,默认分为六种日志级别(括号为级别对应的数值)
-
NOTSET(0)
-
DEBUG(10):详细信息,只有诊断问题时才需要
-
INFO(20):当程序运行时期望的一些信息
-
WARNING(30):软件运行正常,但是可能会有一些预期之外的事情发生
-
ERROR(40):由于一些严重问题导致软件一些功能出现问题
-
CRITICAL(50):很严重的错误直接导致软件不能运行
-
在自定义日志级别时注意不要和默认的日志级别数值相同
-
在logging执行时输出大于等于设置的日志级别的日志信息,默认的级别为WARNING
logging库
- logging常见对象
- Logger:日志,暴露函数给应用程序,基于日志记录器和过滤器级别决定那些日记有效
- LogRecord:日志记录器,将日记传到响应的处理器处理
- Handler:处理器,将(日志记录器产生的)日志记录发送至合适的目的地
- Filter:过滤器,提供了更好的粒度控制,它可以决定输出那些日志记录
- Formatter:格式化器,致命了最终输出中日志记录的格式
logging使用非常简单,使用basicConfig()
方法就能基本满足使用;如果没有传入参数,会根据默认的配置创建Logger对象,默认日志级别被设置为WARNING
函数参数 | 参数描述 |
---|---|
filename | 日志输出到文件的文件名 |
filemode | 文件模式,r[+],w[+],a[+] |
format | 日志输出的格式 |
datefat | 日志附带日期时间的格式 |
style | 格式占位符,默认为%和{} |
level | 日志输出级别 |
stream | 定义输出流,用来初始化StreamHandler对象,不能喝filename参数一起使用,会抛出ValueError异常 |
handles | 定义处理器,用来创建Handler对象,不能和filename、stream参数使用,否则会抛出ValueError异常 |
-
Formatter对象
Formatter对象用来设置具体的输出格式,常用格式如下:
格式 变量描述 %(asctime)s 将日志的世界构造成可读的形式 %(name) 日志对象的名称 %(filename)s 不包含路径的文件名 %(pathname)s 包含路径的文件名 %(funcName) 日志记录所在的函数名 %(levelname)s 日志的级别名 %(message)s 具体的日志信息 %(lineno)d 日志记录所在的行好 %(process)d 当前进程ID %(processName)s 当前进程名称 %(thread)d 当前线程ID %(threadName)s 当前线程名称 -
Logger对象
- getLogger(name=None):返回一个Logger对象,这个对象提供所有的log使用的接口,name不指定默认为root
- basicConfig():对logging做一个基本的配置
'''
一般来说日志的处理分为:
1. 获取Logger对象
2. 设置日志等级
3. 设置Handler对象
4. 设置输出格式
5. 将Handler与Logger对象绑定
6. 设置日志输出信息
'''
import logging
#创建logger
log=logging.getLogger("example")
# 设置日志等级
log.setLevel(logging.DEBUG)
# 设置两个处理器对象
# 控制台处理器
hander1=logging.StreamHandler()
# 文件处理器
hander2=logging.FileHandler('haha.log',mode='w',encoding='utf8')
# 给处理器设置日志等级
# 如果不设置则按照logger对象的日志等级
hander1.setLevel(logging.INFO)
hander2.setLevel(logging.DEBUG)
# 设置两个输出格式
formatter1=logging.Formatter("%(asctime)s-%(name)s-%(levelname)s-%(message)s")
formatter2=logging.Formatter("%(levelname)s : %(message)s")
# 设置两个处理器的输出格式
hander1.setFormatter(formatter1)
hander2.setFormatter(formatter2)
# 将处理器绑定logger对象
log.addHandler(hander1)
log.addHandler(hander2)
# 信息处理
log.info("这是一个info信息")
log.debug("这是一个debug信息")
log.warning("这是一个warnning信息")
log.info("这个怎么算呢")
第三方库-loguru
loguru的作用跟logging差不多
from loguru import logger
logger.info('我的世界')
logger.warning('我的世界')
logger.error('我的世界')
logger.debug('我的世界')
# 输出结果是彩色的,更加友好
# 默认的输出格式是包含【时间、级别、模块名、行号以及日志信息】
2022-07-29 10:42:02.217 | INFO | __main__:<module>:3 - 我的世界
2022-07-29 10:42:02.217 | WARNING | __main__:<module>:4 - 我的世界
2022-07-29 10:42:02.220 | ERROR | __main__:<module>:5 - 我的世界
2022-07-29 10:42:02.221 | DEBUG | __main__:<module>:6 - 我的世界
- 存储到文件
from loguru import logger
# 可以直接用add方法存储到文件
logger.add("interface_log_{time}.log", rotation="500MB", encoding="utf-8", enqueue=True, compression="zip", retention="10 days")
logger.info("中文test")
logger.debug("中文test")
logger.error("中文test")
logger.warning("中文test")
'''
add方法参数:
第一个参数为保存文件路径
rotation可以理解为日志的创建时机
- rotation = '500MB':当日志文件达到500MB就会重新生成一个文件
- rotation = ‘12:00’:每天12点会创建新文件
- rotation = ‘1 week‘:每一周创建一个文件
retention:配置日志的最长保留时间
compression:配置文件的压缩格式
encoding:文件编码格式
'''