Python 的 logging 模块是官方推荐的日志记录工具,适用于小型脚本和大型系统。它提供了灵活统一的日志处理机制,可将日志信息输出到终端、文件、网络服务等多种媒介,支持日志等级分类、格式化输出、日志轮换和多模块共享。
常见应用场景:
(1)程序运行时的信息跟踪(debug、info、error 等)。
(2)错误记录与异常分析(尤其用于线上系统)。
(3)多模块项目的统一日志管理。
(4)日志文件的自动轮换(配合 handlers)。
(5)跨模块或多线程日志追踪。
◆ ◆ ◆
核心概念
1、日志等级(Log Levels)
日志分为五个主要等级,按严重程度升序排列:
DEBUG:最详细的信息,通常用于调试。
INFO:普通运行信息。
WARNING:警告,但程序还能继续运行。
ERROR:错误,程序部分功能可能失败。
CRITICAL:严重错误,程序可能无法继续运行。
2. 四大核心组件
Logger:记录器,用于产生日志。通常用 logging.getLogger(name) 获取。
Handler:处理器,控制日志输出位置(终端、文件、邮件等)。
Formatter:格式器,定义日志内容的输出格式。
Filter:过滤器,用于细粒度地控制日志输出内容。
◆ ◆ ◆
应用举例
例 1:最简单用法(打印 INFO 级别日志)
import logging
logging.basicConfig(level=logging.INFO)
logging.info("程序启动成功")例 2:设置日志格式和输出文件
import logging
logging.basicConfig(
filename='app.log',
filemode='a',
level=logging.DEBUG,
format='%(asctime)s - %(levelname)s - %(message)s'
)
logging.debug("调试信息")
logging.error("发生错误")例 3:使用 Logger 对象与多个 Handler
import logging
# 创建 Logger
logger = logging.getLogger('myapp')
logger.setLevel(logging.DEBUG)
# 控制台输出
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)
# 文件输出
file_handler = logging.FileHandler('myapp.log')
file_handler.setLevel(logging.WARNING)
# 日志格式
formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
file_handler.setFormatter(formatter)
# 添加 Handler
logger.addHandler(console_handler)
logger.addHandler(file_handler)
# 测试输出
logger.debug("调试")
logger.info("普通信息")
logger.warning("警告")
logger.error("错误")例 4:通过异常信息记录日志
import logging
logging.basicConfig(level=logging.ERROR)
try:
result = 10 / 0
except Exception as e:
logging.exception("捕获到异常") # 自动附带 traceback例 5:日志轮换(RotatingFileHandler)
import logging
from logging.handlers import RotatingFileHandler
logger = logging.getLogger("rotate")
logger.setLevel(logging.INFO)
# 最大 1MB,最多保留 3 个文件
handler = RotatingFileHandler("rotate.log", maxBytes=1_000_000, backupCount=3)
formatter = logging.Formatter('%(asctime)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.info("这是循环日志测试")◆ ◆ ◆
常用函数速览
basicConfig(**kwargs)
快速配置日志系统(适用于简单场景)。
参数:
filename:日志输出文件名(若设定则写入文件)
level:日志级别,如 logging.INFO
format:日志格式字符串
filemode:文件模式,如 'w'、'a'
返回:无返回,直接配置全局日志系统
getLogger(name=None)
获取指定名称的 Logger 对象,便于模块内独立使用。
参数:name 为日志器名称,None 为 root logger
返回:Logger 实例,可进行后续调用
log(level, msg, *args)
通用日志方法,手动传入日志级别。
参数:
level:整数形式的日志级别,如 logging.WARNING
msg:消息字符串,支持 %s 占位符格式化
返回:无返回
debug(msg) / info(msg) / warning(msg) / error(msg) / critical(msg)
按不同级别输出日志。
参数:msg 为日志内容
返回:无返回,输出日志
exception(msg)
在 except 块中使用,自动输出堆栈信息。
参数:msg 为日志内容
返回:无返回,相当于 error() + traceback 信息
◆ ◆ ◆
补充说明
1、basicConfig() 只会在首次调用时生效,之后调用将被忽略(除非重启解释器)。
2、实际项目中推荐使用 getLogger() 创建多个模块级 Logger。
3、配置可通过代码或使用 dictConfig/fileConfig 实现更复杂的方案。
4、RotatingFileHandler 和 TimedRotatingFileHandler 是生产环境常用文件日志方案。
5、可通过 Logger.propagate = False 阻止日志向上级传播。
“点赞有美意,赞赏是鼓励”
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.