loguru模块
转自:https://blog.csdn.net/cui_yonghua/article/details/107498535
参考:https://kangyucheng.blog.csdn.net/article/details/112794185
相比较于logging模块,loguru模块操作起来更加简单,它不需要我们手动的对logger进行配置
1.基本使用
loguru默认的输出格式有时间、级别、模块名、行号以及日志信息,不需要手动创建 logger,直接使用即可,另外其输出还是彩色的,看起来会更加友好。
from loguru import logger
logger.debug('this is a debug message')
logger.info('this is another debug message')
logger.warning('this is another debug message')
logger.error('this is another debug message')
logger.success('this is success message!')
logger.critical('this is critical message!')
显示结果如下:
如果要将日志输出到文件中,只需要
from loguru import logger
logger.add('my_log.log')
logger.debug('this is a debug')
2.详细使用
2.1 add方法的定义
在使用logging模块的时候,我们需要手动的配置Handler、Formatter以及Filter,需要调用不同的函数进行配置,在loguru中,我们只需要一个add()函数即可。通过add()函数,我们可以设置Handler,设置Formatter,Filter Message以及设置Level。
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
) -> int: Handle_id:
pass
参数说明:
-
sink
作用:sink是用来确定日志的输出路径
sink的选择如下:
- sink可以传入一个file对象,例如sys.stderr或者open(‘file.log’,‘w’)都可以
- sink可以直接传入一个str字符串或者pathlib.Path对象,其实就是代表文件路径的,如果识别到是这种类型,它会自动创建对应路径的日志文件并将日志数据输入进去。
- sink可以是一个方法,可以自行定义输出实现
- sink还可以是一个自定义的类。具体的实现规范可以参见官方文档
-
level
作用:标志日志的级别,低于该级别的日志将不会输出,如下图,值越小的日志级别越低
级别 值 方法 TRACE 5 logger.trace() DEBUG 10 logger.debug() INFO 20 logger.info() SUCCESS 25 logger.success() WARNING 30 logger.warning() ERROR 40 logger.error() CRITICAL 50 logger.critical() -
format
作用:格式化输出日志信息
取值 作用 elapsed 时间(从项目开始到现在过了多少时间) exception 例外(不遵守现在格式的输出,如果有的) extra 被用户定义的其他属性,必须是字典 file 执行文件 function 执行函数 level 日志级别 line 行数 message 信息 module 日志在那个模块被调用 name 模块的名称 process 进程id或者进程名,默认是id thread 线程id或者线程名 time 日期 -
rotation
作用:设置日志的生成大小、生成时间、保存最长时间等
logger.add("file_1.log", rotation="500 MB") # Automatically rotate too big file logger.add("file_2.log", rotation="12:00") # New file is created each day at noon logger.add("file_3.log", rotation="1 week") # Once the file is too old, it's rotated # 这是每隔一周创建一个日志文件
-
retention
作用:指定日志保留时长
logger.add("file_X.log", retention="10 days") # Cleanup after some time
-
compression
作用:配置文件压缩格式
logger.add("file_Y.log", compression="zip") # Save some loved space
2.2 异常捕获
两种异常捕获方法
1.catch装饰器方法
通过catch装饰器的方式实现异常捕获:
from loguru import logger
logger.add("runtime.log",encoding="gbk")
@logger.catch()
def my_function(x,y,z):
return (x+y)/z
my_function(1,1,0)
2.exception方法
from loguru import logger
logger.add("runtime.log")
def my_function1(x, y, z):
try:
return 1 / (x + y + z)
except ZeroDivisionError:
logger.exception("What?!")
my_function1(0, 0, 0)