• loguru 日志模块


    loguru 日志模块

    安装

    pip install loguru
    

    基本使用

    from loguru import logger
    
    logger.debug('this is a debug message')
    

    如果想要输出到其他的位置,比如存为文件,我们只需要使用一行代码声明

    from loguru import logger
    
    logger.add('runtime.log')
    logger.debug('this is a debug')
    

    详细使用

    loguru 对输出到文件的配置有非常强大的支持

    比如支持输出到多个文件,分级别分别输出,过大创建新文件,过久自动删除等等。

    add 方法就相当于给 logger 添加了一个 Handler,它给我们暴露了许多参数来实现 Handler 的配置,下面我们来详细介绍下

    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
    
    logger.add('runtime.log', format="{time} {level} {message}", filter="my_module", level="INFO")
    

    rotation 配置

    我们想一天输出一个日志文件,或者文件太大了自动分隔日志文件,我们可以直接使用 add 方法的 rotation 参数进行配置

    logger.add('runtime_{time}.log', rotation="500 MB")
    

    通过这样的配置我们就可以实现每 500MB 存储一个文件,每个 log 文件过大就会新创建一个 log 文件。我们在配置 log 名字时加上了一个 time 占位符,这样在生成时可以自动将时间替换进去,生成一个文件名包含时间的 log 文件

    另外我们也可以使用 rotation 参数实现定时创建 log 文件

    logger.add('runtime_{time}.log', rotation='00:00')
    

    这样就可以实现每天 0 点新创建一个 log 文件输出了

    我们也可以配置 log 文件的循环时间,比如每隔一周创建一个 log 文件

    logger.add('runtime_{time}.log', rotation='1 week')
    

    retention 配置

    很多情况下,一些非常久远的 log 对我们来说并没有什么用处了,它白白占据了一些存储空间,不清除掉就会非常浪费。retention 这个参数可以配置日志的最长保留时间。 比如我们想要设置日志文件最长保留 10 天,可以这么来配置

    logger.add('runtime.log', retention='10 days')
    

    Traceback 记录

    如果遇到运行错误,而我们在打印输出 log 的时候万一不小心没有配置好 Traceback 的输出,很有可能我们就没法追踪错误所在了。 但用了 loguru 之后,我们用它提供的装饰器就可以直接进行 Traceback 的记录

    @logger.catch
    def my_function(x, y, z):
        # An error? It's caught anyway!
        return 1 / (x + y + z)
    

    我们做个测试,我们在调用时三个参数都传入 0,直接引发除以 0 的错误,看看会出现什么情况

    > File "run.py", line 15, in <module>
        my_function(0, 0, 0)
        └ <function my_function at 0x1171dd510>
    
      File "/private/var/py/logurutest/demo5.py", line 13, in my_function
        return 1 / (x + y + z)
                    │   │   └ 0
                    │   └ 0
                    └ 0
    
    ZeroDivisionError: division by zero
    
  • 相关阅读:
    程序员应该看的书
    linux下grep命令详解
    apache基本配置
    shell脚本从windows下发送到linux下运行失败的问题
    nginx服务器的安装和配置基础
    linux下ps命令用法
    apache的python部署
    《我刀刻我心——关羽往事》新书发布会在京举行
    C++图书中的王者
    C++应用程序性能优化
  • 原文地址:https://www.cnblogs.com/kai-/p/14558754.html
Copyright © 2020-2023  润新知