python更方便高效的日志管理loguru

对比使用logging模块手动封装使用,配置复杂麻烦,发现一个loguru模块,使用更方便简单。

 

1、安装

 

pip install loguru

 

2、导入及日志输出控制台

 

from loguru import logger  #导入模块

logger.debug('测试一下')    #直接调用方法即可
logger.error('错误测试')

  

 

运行,在控制台输出效果图,默认输出格式如下:

包括时间、日志级别、模块名、行号、日志内容

 

 

3、日志输出到文件

 

from loguru import logger

logger.add('runtime_{time}.log', rotation='00:00')    #将结果输出到文件里(当前目录下),文件命名按照当前时间命名,并且设置roation——每天0点新增一个日志
logger.debug('测试一下')

  

 

效果图如下:

 

 

自定义输出到文件格式:

loguru官网的描述:https://loguru.readthedocs.io/en/stable/api/logger.html#loguru._logger.Logger.add

 

 

 参数说明

  • sink:支持多种数据结构,可以传入一个字符串、一个文件对象、一个路径对象代表路径、一个方法、logging模块的Handler
  • level:默认为debug类型
  • format:输出格式设置

说明:一般可能修改的是sink,其他与logging模块的一样,可参考logging模块中自定义配置

 

这里举例sink为一个路径对象,进行操作:

 

1)创建路径对象(set_path.py)

 

import os
import datetime

class Projectpath:
  #创建日志路径
  root_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))  #获取项目的根目录
  log_path=os.path.join(root_path,'Log')  #定义存放log的文件夹Log
  filename = os.path.join(log_path, '{}.log'.format(datetime.date.today()))  #设置日志文件名字,按照时间格式譬如2020-10-20.log命名
  if not os.path.exists(log_path):  #判断文件夹Log是否存在,不存在进行创建
    os.mkdir(log_path)
     if not os.path.exists(filename):  #判断日志文件是否存在,不存在进行创建
      with open(filename, mode='w', encoding='utf-8') as ff:
        print("日志文件创建成功!")

p_path=Projectpath()  #调用类

  

2)使用路径对象结合loguru使用

 

import loguru
from set_path import p_path
if __name__=='__main__':
    logger.add(sink=p_path.filename, rotation='00:00', encoding='utf-8')
    logger.info('1020测试')

 

4、roation配置

 

4.1、配置根据文件大小输出日志

logger.add('runtime_{time}.log', rotation="500 MB")  #配置文件大小为500MB,超过会自动生成一个新日志文件

 

4.2、配置根据时间输出日志

logger.add('runtime_{time}.log', rotation='00:00')  #设置每天零点创建一个日志文件

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

 

5、retention配置(配置日志最长保留时间)

logger.add('runtime.log', retention='7 days')  #配置日志文件最长保留时间为7天

 

6、compression 配置(配置日志文件为压缩格式)

logger.add('runtime.log', compression='zip')  #设置文件格式压缩为zip,节省空间

 

7、traceback(报错回溯)

使用装饰器,直接在函数或类前面加上@logger.catch

 

 这里举例:

@logger.catch
def div(x,y):
    return x/y


test=div(4,0)

 

若运行报错,在日志中会出现tarceback信息,显示效果图如下:

 

 

  

posted @ 2020-10-20 18:30  spellbound  阅读(3615)  评论(2编辑  收藏  举报