Loguru 简易入门

一、简易应用

from loguru import logger
# 如果与工程中原有的 logger 重名,可设定一个别名
from loguru import logger as mylogger

# 同步保存日志到文件
logger.add('runtime.log')

logger.debug('this is a debug message')
logger.info('this is info message')
logger.warning('this is warning message')
logger.error('this is error message')
logger.info('this is info message')
logger.success('this is success message!')
logger.critical('this is critical message!')

二、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

skin参数可以传入多种不同的数据结构,如下:

  • sink 可以传入一个 file 对象,例如 sys.stderr 或者 open('file.log', 'w') 都可以。
  • sink 可以直接传入一个 str 字符串或者 pathlib.Path 对象,其实就是代表文件路径的,如果识别到是这种类型,它会自动创建对应路径的日志文件并将日志输出进去。
  • sink 可以是一个方法,可以自行定义输出实现。
  • sink 可以是一个 logging 模块的 Handler,比如 FileHandler、StreamHandler 等等,或者上文中我们提到的 CMRESHandler 照样也是可以的,这样就可以实现自定义 Handler 的配置。
  • sink 还可以是一个自定义的类,具体的实现规范可以参见官方文档。https://loguru.readthedocs.io/en/stable/api/logger.html#sink

其他参数例如 format、filter、level 等等。其实它们的概念和格式和 logging 模块都是基本一样的了,例如这里使用 format、filter、level 来规定输出的格式:

logger.add('runtime.log', format="{time} {level} {message}", filter="my_module", level="INFO",encoding="utf-8")

三、rotation 配置

# log文件超过500M时会新建一个log文件,日志文件名自动以创建时间命名
logger.add('runtime_{time}.log', rotation="500 MB")  

# 每天0点新建一个log文件
logger.add('runtime_{time}.log', rotation='00:00') 

#每隔一周创建一个 log 文件
logger.add('runtime_{time}.log', rotation='1 week') 

四、retention 配置

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

logger.add('runtime.log', retention='10 days') # 保留最新10天的log

五、compression 配置

loguru 还可以配置文件的压缩格式,比如使用 zip 文件格式保存,示例如下:

logger.add('runtime.log', compression='zip') # 使用zip文件格式保存

六、异常捕获

对函数使用 @logger.catch 装饰器,当函数执行时如果发生异常,loguru 将自动捕获该异常并记录到日志;未触发异常时则不会记录日志。

@logger.catch
def my_function(x, y, z):
    # An error? It's caught anyway!
    return 1 / (x + y + z)
posted @ 2024-04-16 09:36  汉学  阅读(103)  评论(0)    收藏  举报