loguru
pip install loguru
官方文档 https://loguru.readthedocs.io/en/stable/overview.html
教程
from loguru import logger
logger.add("interface_log_{time}.log", rotation="500MB", encoding="utf-8", enqueue=True, compression="zip", retention="10 days")
logger.info("中文")
- enqueue=True 代表异步写入,官方的大概意思是:在多进程同时往日志文件写日志的时候使用队列达到异步功效
- rotation 可以理解成日志的创建时机,可以有多种写法
- rotation="500 MB" :当日志文件达到500MB时就会重新生成一个文件
- rotation="12:00" :每天12点就会创建新的文件、
- rotation="1 week" :每隔一周创建一个log
- retention 配置日志的最长保留时间,官方例子: "1 week, 3 days"、"2 months"
- compression 配置文件的压缩格式,可以配置常见的格式 zip、tar、gz、tar.gz 等
示例
import datetime
from loguru import logger
import os
class LogHandler:
"""
按日期创建日志文件
info、error类型的日志分别写入不同的文件,info日志包含了error日志。
"""
PATH = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
LOG_PATH = os.path.join(PATH, "logs")
today_now = f"{datetime.datetime.now().year}_{datetime.datetime.now().month}_{datetime.datetime.now().day}"
logger.add(os.path.join(LOG_PATH, f'info_{today_now}.log'), rotation="00:01", format="{time} {level} -> {message}",
encoding="utf-8", level="INFO")
logger.add(os.path.join(LOG_PATH, f"error_{today_now}.log"), rotation="00:01", format="{time} {level} -> {message}",
encoding="utf-8", level="ERROR")
@staticmethod
def log():
return logger
if __name__ == '__main__':
log = LogHandler.log()
log.info("就是这么简单,调用即可")
# 捕捉函数运行过程中的错误,输出日志
@log.catch
def my_function(x, y, z):
# An error? It's caught anyway!
return 1 / (x + y + z)
my_function(0, 0, 0)
def mistake(a, b):
try:
print(a / b)
except ZeroDivisionError:
# 将捕获到的错误输出
log.exception("?")
log.info("开始执行函数")
mistake(1, 0)
log.info("函数执行完成!")