loguru——Python优雅日志包

                                         loguru——Python优雅日志包

 

参考文档:

 

常用用法(其他用法与细节,参考以上文档):

from loguru import logger
import sys

logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="INFO")
logger.add("file_{time}.log")
logger.debug('this is a debug')

运行结果:

log文件如下:

 

需求:新建一个日志文件夹,定时清除过期日志。demo如下:

from loguru import logger

logger.add("./logs/detail.log",
           level="INFO",
           encoding="utf-8",
           format="{level} | {time:YY-MM-DD HH:mm:ss} | {file} | {line} | {message}",
           rotation="00:00",
           retention="7 days")

logger.add("./logs/error.log",
           level="ERROR",
           encoding="utf-8",
           format="{level} | {time:YY-MM-DD HH:mm:ss} | {file} | {line} | {message}",
           rotation="00:00",
           retention="7 days")


logger.info("今天下雨了")
logger.error("肚子痛,好难受!")

运行结果:

 

踩过的一个大坑:python,loguru日志递增式的重复打印,且无法保存为不同的日志文件

  • 封装loguru.logger为一个类,并用其他子类来继承父类,目的:不同功能的日志保存在不同的日志文件中。
  • 结果:控制台正常打印日志,但是日志文件会出现重复打印结果,并且是递增式地重复,极速增大日志内存,风险很大;同时不同日志文件中的日志结果是一样的。
  • 原因分析:
  • A. 解释为啥日志结果一样:logger_1、logger_2和logger_3跟logger指向的是同一个对象【就算是封装,也少不了xxx = logger】。这些”变量”只不过是这个对象的名字而已,所以代码本质上就是给logger这个名字对应的对象绑定了几个文件,自然每个文件的内容都是完全一样的。但是单独运行子功能代码肯定是没有问题的,一旦存在日志文件相互调用,就会出现问题。

  • B. 解释为啥日志结果递增式重复:loguru全局只有一个logger,logging可以通过名字的不同创建多个,所以每出现一次,就会存在递增式重复调用。

  • C. 解释真的无法分开保存吗?答:不是,可以配置filter,但是需要对每个输出日志进行过滤判断,违背了保存日志的初衷,得不偿失。

  • 解决措施:主函数配置好日志文件的保存路径后,调用子模块中的loguru.logger,就不要再在子模块中添加日志文件配置了。强迫症表示很难受,对吧?
  • 总结:logger与loguru的区别是什么?

        A. 从安装来看,logging不需要安装,loguru需要安装;

        B. 从配置的角度,loguru全局只有一个logger,logging可以通过名字的不同创建多个;

        C. 配置loguru相比配置logging更加简便;

        D. 其他模块的支持,这里面其他模块指定是import 的其他模块,比如,系统中import peewee,在peewee中使用了logging模块,如果想要打印peewee中的日志,logging可以通过配置打印出来,而loguru是不支持的。

 

参考:Python日志详解【两篇就够了系列】--第二篇loguru

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页