Loguru
# Loguru
# Loguru介绍
Loguru是一个开箱即用的日志记录模块,我们不再需要复杂的初始化操作就可以记录日志。
# Loguru用法
# 导入模块
import sys
from loguru import logger
# 日志级别
LOG_LEVEL = "DEBUG"
# 日志配置
LOG_FORMAT = "<magenta>{time:YYYY-MM-DD HH:mm:ss:SSS}</magenta> | <light-yellow><{name}</light-yellow>:<light-yellow>{function}</light-yellow>:<light-yellow>{line}></light-yellow> | <level>[{level}]</level> -> <level>{message}</level>"
# 去掉默认的Handler,添加自己的Handler
logger.remove(handler_id=0)
# 日志输出Handler
logger.add(
# 输出
"./app.log",
format=LOG_FORMAT,
# 日志等级
level=LOG_LEVEL,
# 日志轮转
rotation="5 MB",
# 最长保留时间
retention="15 days",
# zip格式压缩旧日志文件
compression="gz",
# 日志文件不需要输出颜色
colorize=False,
# 异步写入确保日志完整性
enqueue=True,
encoding="utf-8",
)
# 屏幕输出Handler
logger.add(sys.stdout, format=LOG_FORMAT, level=LOG_LEVEL, colorize=True, enqueue=True)
if __name__ == "__main__":
logger.debug("This is Test Debug!")
logger.info("This is Test Info!")
logger.success("This is Test Success!")
logger.error("This is Test Error!")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 接管logging日志
Loguru可以接管第三方模块默认的logging日志。
需要在其他模块产生日志前执行,以进行接管。
# 导入模块
import logging
import sys
from loguru import logger
# 自定义类,拦截logging标准库的日志,重定向到loguru
class InterceptHandler(logging.Handler):
def emit(self, record):
try:
level = logger.level(record.levelname).name
except ValueError:
level = record.levelno
frame, depth = logging.currentframe(), 2
while frame.f_code.co_filename == logging.__file__:
frame = frame.f_back
depth += 1
logger.opt(exception=record.exc_info, depth=depth).log(level, record.getMessage())
def take_over_log():
# 拦截所有标准库logging日志
logging.basicConfig(handlers=[InterceptHandler()], level=0) # type: ignore
# 确保所有已存在的logger也使用这个handler
for name in logging.root.manager.loggerDict.keys():
logging.getLogger(name).handlers = []
logging.getLogger(name).propagate = True
# 将tortoise的日志设为灾难,以实现不显示
for name in ["tortoise", "tortoise.db_client", "tortoise.orm"]:
logging.getLogger(name).setLevel(logging.CRITICAL)
take_over_log()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33