正常使用的logging配置起来比较麻烦,而loguru可以将log的配置结合使用变得简单和方便;
安装
pip3 install loguru
基本使用
from loguru import logger
logger.debug('this is a debug')
输出结果:
输出格式不要再进行配置,默认的格式为:时间 | 级别 | 模块:输出行号 - 日志信息,而且输出在控制台中的信息是有颜色区分,能更好的的分辨;同时,我们还可以将信息输出到其他地方,例如:
from loguru import logger
logger.add('test.log')
logger.debug('this is a debug')
详细使用
定义:
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
- sink 可以传入一个file对象,例如:sys.stderr 或者 open(‘filename’,‘w’)都可以;
- sink 可以直接传入一个 str 或者 文件的路径对象,如果识别到是这种类型,它会自动创建对应路径的日志文件并将日志输出进去;
- sink 可以是一个方法,可以自行定义输出实现;
- sink 可以是一个 logging 模块的 Handler,比如 FileHandler、StreamHandler 等等,或者 CMRESHandler 照样也是可以的,这样就可以实现自定义 Handler 的配置;
- sink 还可以是一个自定义的类,具体的实现规范可以参见官方文档
基本参数
logger.add('runtime.log', format="{time} {level} {message}", filter="my_module", level="INFO")
删除sink
from loguru import logger
trace = logger.add('test.log')
logger.debug('this is a debug')
logger.remove(trace)
logger.debug('this is a new debug')
控制台输出:
日志文件输出:
调用 remove 方法可以删除历史log,但实际上这并不是删除,只不过是将 sink 对象移除之后,在这之前的内容不会再输出到日志中。 这样我们就可以实现日志的刷新重新写入操作。
rotation 配置
logger.add('runtime_{time}.log', rotation="500 MB")
通过上面的配置可以实现每500 MB 储存一个文件,每个log文件过大就会穿件一个 log 文件。
time占位符:可以自动生成时间,生成一个文件名包含时间的 log 文件;
logger.add('runtime_{time}.log', rotation='00:00')
上面这个可以实现每天0点创建一个log文件输出,也可以设置成循环时间,例如:
logger.add('runtime_{time}.log', rotation='1 week')
retention 配置
logger.add('runtime.log', retention='10 days')
通过 retention 可以配置日志的最长保留时间。
compression 配置
logger.add('runtime.log', compression='zip')
通过 compression 可以配置文件的压缩格式。
字符串格式化
loguru 在输出 log 的时候还提供了非常友好的字符串格式化功能,像这样:
logger.info('If you are using Python {}, prefer {feature} of course!', 3.6, feature='f-strings')
Traceback 记录
当遇到错误是,如果在打印出log的时候没有配置 Traceback 的输出,很有可能无法追踪错误。loguru提供了装饰器就可以直接进行 Traceback 的记录。
from loguru import logger
@logger.catch()
def test():
return 1/0
test()
输出结果:
文章参考:https://cuiqingcai.com/7776.html