Python中日志记录新技能

导语 不断学习,持续进化,get日志记录新技能

一般情况下我们记录日志经常用到的是logging模块,在使用前我们需要配置模板,设置Handler、Formatter来预处理,例如日志输出位置、输出格式、日志分块和备份等。在不同项目使用日志时,前期需要进行logger的配置工作,相比较今天get的新技能个人感觉配置较繁琐。

新技能就是“Delgan/loguru”,Loguru is a library which aims to bring enjoyable logging in Python

本篇我们从四方面介绍Loguru:

1、与logging区别,为什么loguru“香”

2、安装

3、快速使用

4、高阶用法简介

一、与logging区别,为什么loguru“香”

logging

loguru

相同

提供简洁、灵活地事件记录功能

不同

需要显式实例化logger,并使用Handler,Formatte,Filter

减少配置步骤,add函数统治所有

二、安装

老规矩,第一步安装库,在python3环境下,直接pip3安装即可

pip3 install loguru

三、快速使用

安装成功之后,我们就可以开始啦

from loguru import logger

logger.debug("This is Debug")

不需要繁琐的配置,开箱即“食”,so easy

loguru中主要对象就是logger,有且只有loguru,为何不需要配置就可使用呢,那是因为这些配置已经前置啦,输出格式化,文本颜色等,控制台输出如下:

输出内容包括时间、级别、模块名、行号以及日志信息,另外其输出还是彩色的,看起来会更加友(xuan)好(ku)

那如何DIY个性化定制专属日志呢,我们看看下一章吧

四、高阶用法简介

我们主要看看loguru.logger的“万能”add()

def add(
        self,
        sink,
        *,
        level=_defaults.LOGURU_LEVEL,
        format=_defaults.LOGURU_FORMAT,
        filter=_defaults.LOGURU_FILTER,
        colorize=_defaults.LOGURU_COLORIZE,
        serialize=_defaults.LOGURU_SERIALIZE,
        backtrace=_defaults.LOGURU_BACKTRACE,
        diagnose=_defaults.LOGURU_DIAGNOSE,
        enqueue=_defaults.LOGURU_ENQUEUE,
        catch=_defaults.LOGURU_CATCH,
        **kwargs
    ):
  pass

 从源码中可以看出,add参数很多,如 level、format、filter、color 等等,我们重点看看sink参数

sink : |file-like object|_, |str|, |Path|, |callable|_, |coroutine function|_ or |Handler|

An object in charge of receiving formatted logging messages and propagating them to an

appropriate endpoint.

(1)支持file对象

(2)可以直接传入一个 str 字符串或者 pathlib.Path 对象

(3)可以是一个logging模块中的Handler

(4)可以是一个类或方法

下面我们就试试吧

(一)保存输出日志到文件

from loguru import logger

logger.add("test_loguru_{time}.log")  # 在add定义输出的文件名

logger.debug("This is Debug")

 控制台输出

文件输出到当前工程目录下

文件内容

(二)支持日志大小分割、日志保留时间定义

按日志大小、时间(小时、周)创建

rotation : |str|, |int|, |time|, |timedelta| or |callable|_, optional

A condition indicating whenever the current logged file should be closed and a new one

started.

配置日志保留最长时间

retention : |str|, |int|, |timedelta| or |callable|_, optional

A directive filtering old files that should be removed during rotation or end of

program.

from loguru import logger

logger.add("test_loguru_{time}.log", rotation="1MB")   # 每个文件大小1MB.超过创建新文件

logger.add("test_loguru_{time}.log", rotation="12:00 ")   # 每天12点创建新文件

logger.add("test_loguru_{time}.log", rotation="1 week")   # 每周创建新文件

(三)支持日志时间自定义

from loguru import logger

logger.add("test_loguru_{time}.log", format="{time:YYYY-MM-DD A HH:mm:ss.SSSS} | {level} | {name} | {message}",level="DEBUG", rotation="500MB", retention="1 days")

logger.info("This is INFO")

(四)支持代码异常追踪

backtrace (bool, optional) – Whether the exception trace formatted should be extended upward, beyond the catching point, to show the full stacktrace which generated the error.

diagnose (bool, optional) – Whether the exception trace should display the variables values to eases the debugging. This should be set to False in production to avoid leaking sensitive data.

1、在add参数中设置

from loguru import logger

logger.add("test_loguru_{time}.log", format="{time} | {level} | {name} | {message}", level="DEBUG",
           rotation="1 KB", retention="10 seconds", encoding="utf-8", backtrace=True, diagnose=True)


def test(num_list):
    try:
        for num in num_list:
            logger.info(f"This Number is " + num)
    except Exception as e:
        logger.exception(e)


if __name__ == "__main__":
    l = [1, 2, 3]
    test(num_list=l)

 控制台输出

日志文件内容

2、使用装饰器直接Traceback记录

from loguru import logger

logger.add("test_loguru_{time}.log", format="{time} | {level} | {name} | {message}", level="DEBUG",
           rotation="1 KB", retention="10 seconds", encoding="utf-8")


@logger.catch
def test(num_list):
    for num in num_list:
        logger.info(f"This Number is " + num)


if __name__ == "__main__":
    l = [1, 2, 3]
    test(num_list=l)

控制台输出

文件输出

至此,我们可以看出Loguru是很强大的,应用简洁,调试追踪直观,当然它还有很多强大功能,大家可以前往官网学习哈

参考资料:

github:https://github.com/Delgan/loguru

loguru帮助手册:https://loguru.readthedocs.io/en/stable/index.html

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
Python中日志记录新技能
一般情况下我们记录日志经常用到的是logging模块,在使用前我们需要配置模板,设置Handler、Formatter来预处理,例如日志输出位置、输出格式、日志...
<<上一篇
下一篇>>