python-logging模块

日志级别

级别 方法 用途
DEBUG logging.debug() 调试信息
INFO logging.info() 普通信息
WARNING logging.warning() 警告信息
ERROR logging.error() 错误信息
CRITICAL logging.critical() 严重错误

python默认只会打印warning以上级别的日志,可通过basicConfig进行设置,如下

1
2
3
4
5
6
7
8
9
# 基础配置
logging.basicConfig(level=logging.DEBUG)

# 记录不同级别的日志
logging.debug("这是一个DEBUG级别的日志")
logging.info("这是一个INFO级别的日志")
logging.warning("这是一个WARNING级别的日志")
logging.error("这是一个ERROR级别的日志")
logging.critical("这是一个CRITICAL级别的日志")

格式化log并输出

我们可以使用全局配置,完成log的格式化和输出成文件,如下

1
logging.basicConfig(level=logging.DEBUG,format='%(asctime)s - %(levelname)s - %(message)s',filename='basic.log',filemode='w')

同样,我们可以自定义logger

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
# 创建自定义logger
logger = logging.getLogger('my_app')
logger.setLevel(logging.DEBUG)

# 清除之前的处理器
logger.handlers.clear()

# 创建文件处理器
file_handler = logging.FileHandler('logs/my_app.log', encoding='utf-8')
file_handler.setLevel(logging.DEBUG)

# 创建控制台处理器
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.WARNING)

# 创建不同的格式器
file_formatter = logging.Formatter(
'%(asctime)s | %(name)s | %(levelname)s | %(funcName)s:%(lineno)d | %(message)s'
)
console_formatter = logging.Formatter(
'🚨 %(levelname)s: %(message)s'
)

file_handler.setFormatter(file_formatter)
console_handler.setFormatter(console_formatter)

# 添加处理器
logger.addHandler(file_handler)
logger.addHandler(console_handler)

# 测试不同级别的日志
logger.debug("调试信息 - 只写入文件")
logger.info("普通信息 - 只写入文件")
logger.warning("警告信息 - 控制台和文件都有")
logger.error("错误信息 - 控制台和文件都有")

异常捕获

1
2
3
4
5
6
7
8
try:
result = divide(10, 0)
except ZeroDivisionError as exc:
# 方式 1:记录异常对象
logger.error("除零异常发生: {}", exc)

# 方式 2:记录完整 traceback(推荐)
logger.exception("捕获到异常,详情如下")

loguru的常用使用方法

基础用法

1
2
3
4
5
6
7
from loguru import logger

logger.debug("这是 debug")
logger.info("这是 info")
logger.warning("这是 warning")
logger.error("这是 error")
logger.critical("这是 critical")

输出到文件 logger.add(“app.log”)

过滤级别 logger.add(“app.log”, level=“WARNING”)

移除默认控制台输出 logger.remove()

参考资料

[Python] logging模块怎么用_哔哩哔哩_bilibili

[Python] 打印log神器 —— loguru_哔哩哔哩_bilibili