关于python的日志记录--loguru

目标场景

由于我主要的工作内容就是维护公司的数据爬虫系统,系统每天都会进行数十万的网站采集,每天运行的代码会产生大量的日志文件,其中包括

  1. 采集程序的正常输出
  2. 与其他系统的接口对接日志
  3. 系统异常时的报错内容输出

每天的日志输出如果都在同一个文件中的话,排查问题就属于是大海捞针了,所以该介绍下今天的主角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"

他最好用的我觉得是他的levelfilter参数
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)
posted @   jamesenh  阅读(352)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示