日志级别
| 级别 |
方法 |
用途 |
| 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