关于python的日志记录--loguru
目标场景
由于我主要的工作内容就是维护公司的数据爬虫系统,系统每天都会进行数十万的网站采集,每天运行的代码会产生大量的日志文件,其中包括
- 采集程序的正常输出
- 与其他系统的接口对接日志
- 系统异常时的报错内容输出
- 等
每天的日志输出如果都在同一个文件中的话,排查问题就属于是大海捞针了,所以该介绍下今天的主角loguru
介绍
官方文档【英文】(暂时没找到中文的文档)
https://loguru.readthedocs.io/en/stable/api/logger.html
官方文档示例
from loguru import logger
logger.debug("That's it, beautiful and simple logging!")
输出如下
默认的配置中,会有带有颜色凸显的日志内容输出,并且会打上时间戳2022-07-14 23:12:11.247
、日志等级DEBUG
、输出该日志的方法名__main__
重点方法(我觉得他是重点)
>>> logger.add('/Users/jamesenh/data/temp/test.log')
1 # add方法的输出是1,他是为进城添加了一个日志输出对象"/Users/jamesenh/data/temp/test.log"
他最好用的我觉得是他的level
和filter
参数
level
用来控制添加的单个日志文件可以接收的日志文件等级。
可以限定某个日志文件我只想保留ERROR
等级的日志输出,那么其他等级的输出则只会在终端上打印出来,并不会写入到日志文件中。
filter
用来为这个日志输出点做内容过滤
比如只想要这个文件记录进以[code_log]
开头的输出内容,那么我就可以这样添加
logger.add(
'/Users/jamesenh/data/temp/test.log',
filter=lambda x: x["message"].startswith('[code_log]')
)
因为我们设置的过滤掉不是以[code_log]
的输出都不会做记录
所以只会在终端上作输出,日志文件是不会有内容的
这样就能实现在进城运行的过程中,能把日志通过等级和过滤调教输出到不同的文件中,便于后期作排查和分析
下面是我自己封装的一个添加日志文件的方法
def add_log(
log_name: str,
log_filter: object,
log_save_path: str = log_file_save_path_default,
rotation: str = None,
compression: str = None,
**kwargs: Any):
"""
日志生成方法
:param compression: 自动压缩文件的格式
:param rotation: 日志文件最高大小,超过就会重新创建一个新的日志文件
:param log_name: 日志文件名,统一规定生成的文件后缀名为".log"
:param log_filter: 过滤写入该文件的日志内容
:param log_save_path: 日志文件写入的目录,默认目录在conf目录中的配置文件中有规定
:param kwargs: 需要传入logger的其他参数,必须指定参数完整名称
:return:
"""
if log_name in ('', " ", None):
raise KeyError("log_name不能为{}".format(log_name))
if not isinstance(log_save_path, str):
raise TypeError("log_save_path必须为string")
if not os.path.exists(log_save_path):
os.mkdir(log_save_path)
if rotation is None:
rotation = "20 MB"
if compression is None:
compression = "tar.gz"
temp_log_file_save_path = os.path.join(
log_save_path, '{}.log'.format(log_name))
logger.add(
temp_log_file_save_path,
filter=log_filter,
rotation=rotation,
compression=compression,
**kwargs)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现