文章目录
loguru 日志模块
1. 安装日志模块
命令行执行
pip install loguru
2. 使用日志模块
2.1 层级与方法对应(从低到高)
层级 | 方法 |
---|---|
trace | logger.trace() |
debug | logger.debug() |
info | logger.info() |
success | logger.success() |
warning | logger.warning() |
error | logger.error() |
critical | logger.critical() |
logger.trace('这是一条记录日志)
logger.debug('这是一条测试日志')
logger.info('这是一条信息日志')
logger.success('这是一条成功日志')
logger.warning('这是一条警告日志')
logger.error('这是一条错误日志')
logger.critical('这是一条严重错误日志')
2.2 日志规则
设置日志格式,过滤器,日志级别
from loguru import logger
logger.add("file.log", format="{time} {level} {message}", level="INFO")
logger.debug("这是一条测试日志")
logger.info("这是一条信息日志")
输出结果
2023-01-30 10:54:07.781 INFO 这是一条info日志
2.3 保存到文件
from loguru import logger
logger.add("file.log")
logger.debug("这是一条debug日志")
logger.info("这是一条info日志")
结果为目录多出一个日志文件:file.log
2.4 日志文件拆分(add方法)
由于日志文件会非常大,所以实际情况中会对日志文件进行拆分。
from loguru import logger
logger.add("log_{time}.log", encoding='utf-8') # 以时间命名
2.4.1 按文件大小拆分
日志文件过大时,可使用rotation进行拆分
from loguru import logger
logger.add("file_1.log", rotation="500 MB")
设置rotation参数,例如设置500M,超过500M的部分将自动生成新的日志文件。
2.4.2 按时间拆分
例:每天12:00创建新日志文件
from loguru import logger
logger.add("file_2.log", rotation="12:00")
例:每过一个小时创建新日志文件
from loguru import logger
logger.add("file_3.log", rotation="1 hour")
例:每周创建新日志文件
from loguru import logger
logger.add("file_4.log", rotation="1 week")
2.4.3 定期清理日志文件
from loguru import logger
logger.add("file_5.log", retention="10 days")
2.5 时间格式化
from loguru import logger
logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}" , level = "INFO")
logger.debug ( "这是一条debug日志" )
logger.info ( "这是一条info日志" )
输出结果
2023-01-30 10:54:07.781 INFO 这是一条info日志
2.6 日志文件压缩 compression
from loguru import logger
logger.add('zip.log', compression='zip')
通过设置compression参数,来选择文件压缩格式,如 zip、tar、gz 等。
2.7 使用filter参数进行日志文件过滤
使用filter将不同层级日志存入不同文件
from loguru import logger
logger.add("logs-info.log", filter=lambda record: "INFO" in record['level'].name)
logger.add("logs-error.log", filter=lambda record: "ERROR" in record['level'].name)
通过filter参数设置,将
info层级日志存入logs-info.log文件
error层级日志存入logs-error.log文件
2.8 异步写入(enqueue)
使用enqueue,可保证线程安全,多线程安全。
logger.add("file_5.log", enqueue=True)
2.9 序列化为json(serialize)
logger.add("somefile.log", serialize=True)
2.10 异常追溯
loguru能够将异常和错误记录,并且还能对异常进行追溯。
需要添加参数backtrace=True和diagnose=True就会显示整个堆栈跟踪。引用官网的例子
import os
import sys
from loguru import logger
logger.add(os.path.expanduser("~/Desktop/exception_log.log"), backtrace=True, diagnose=True)
def func(a, b):
return a / b
def nested(c):
try:
func(5, c)
except ZeroDivisionError:
logger.exception("What?!")
if __name__ == "__main__":
nested(0)
最后在日志文件中得
File "/Users/Bobot/PycharmProjects/docs-python/src/loguru/log_test.py", line 20, in <module>
nested(0)
└ <function nested at 0x7fb9300c1170>
> File "/Users/Bobot/PycharmProjects/docs-python/src/loguru/log_test.py", line 14, in nested
> func(5, c)
> │ └ 0
> └ <function func at 0x7fb93010add0>
File "/Users/Bobot/PycharmProjects/docs-python/src/loguru/log_test.py", line 10, in func
return a / b
│ └ 0
└ 5
ZeroDivisionError: division by zero
3. 卸载日志模块
pip uninstall loguru