zoukankan      html  css  js  c++  java
  • 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
    
  • 相关阅读:
    Android的数据存储
    Servlet第一天
    JavaScript高级程序设计读书笔记(3)
    Interesting Papers on Face Recognition
    Researchers Study Ear Biometrics
    IIS 发生意外错误 0x8ffe2740
    Father of fractal geometry, Benoit Mandelbrot has passed away
    Computer vision scientist David Mumford wins National Medal of Science
    Pattern Recognition Review Papers
    盒模型bug的解决方法
  • 原文地址:https://www.cnblogs.com/kai-/p/14558754.html
Copyright © 2011-2022 走看看