1. Python logging记录日志基础
1.1. 项目中记录日志为什么很重要
记录日志在项目中是非常重要的,它可以帮助开发者:
- 调试:通过日志记录程序的执行过程,可以帮助开发者快速定位错误源。
- 监控:日志可以用于监控系统的健康状况,及时发现潜在问题。
- 分析:分析日志可以帮助了解用户行为、系统性能以及其他关键指标,进而做出优化决策。
- 审计与合规:日志为操作提供了可追溯的记录,特别是在需要满足合规要求时,日志是不可或缺的。
- 错误追踪:当系统出现问题时,日志可以帮助快速重现问题,进而进行修复。
1.2. Python logging 语法
Python的logging
模块提供了强大的日志记录功能,语法如下:
- 基本配置:
logging.basicConfig()
:设置日志输出的基本配置,如日志级别、输出格式、输出位置等。
- 日志级别:
DEBUG
:详细的调试信息,通常只在开发时使用。INFO
:常规的信息,如程序的运行状态。WARNING
:警告信息,表明可能的潜在问题。ERROR
:错误信息,表明发生了问题,但不至于崩溃。CRITICAL
:严重错误,通常会导致程序崩溃。
- 日志记录器:
- 使用
logging.getLogger()
可以获取日志记录器,并设置不同的处理器(如文件、控制台输出)。
- 使用
- 格式化日志:
logging.Formatter()
:用于定义日志的输出格式。
1.3. Python logging 基本使用
示例代码:
import logging
# 配置日志
logging.basicConfig(level=logging.DEBUG,
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# 记录日志
logging.debug("This is a debug message")
logging.info("This is an info message")
logging.warning("This is a warning message")
logging.error("This is an error message")
logging.critical("This is a critical message")
解释:
basicConfig()
配置日志的基本设置,包括日志级别和格式。level=logging.DEBUG
设置日志级别为DEBUG,记录所有级别的日志。format
设置日志输出的格式,常见格式项包括:时间戳(%(asctime)s
)、日志级别(%(levelname)s
)、日志内容(%(message)s
)等。
1.4. Python logging 项目中使用思路和技巧
在实际项目开发中,日志管理是一项重要的工作。良好的日志管理可以帮助我们快速定位问题、优化性能、跟踪系统行为。以下是一些Python 项目中使用 logging 的最佳实践,包括结构化管理、不同级别日志、文件与控制台日志、日志回滚、日志格式、日志过滤器、日志监控等。
1. 结构化管理日志
在项目中,我们可以使用单独的日志管理模块来统一配置日志,而不是直接在各个文件中调用 basicConfig()
。这样可以实现:
- 统一管理日志配置
- 不同模块使用不同的日志记录器
- 便于后续修改日志配置
示例:创建日志管理模块
# log_config.py
import logging
import os
# 1. 创建日志目录
log_dir = "logs"
if not os.path.exists(log_dir):
os.makedirs(log_dir)
# 2. 配置日志格式
log_format = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
# 3. 创建日志处理器
file_handler = logging.FileHandler(os.path.join(log_dir, "app.log"), encoding='utf-8')
file_handler.setLevel(logging.DEBUG) # 文件日志记录 DEBUG 及以上日志
file_handler.setFormatter(logging.Formatter(log_format))
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO) # 终端只打印 INFO 及以上日志
console_handler.setFormatter(logging.Formatter(log_format))
# 4. 配置日志记录器
logger = logging.getLogger("MyApp")
logger.setLevel(logging.DEBUG)
logger.addHandler(file_handler)
logger.addHandler(console_handler)
使用方法:
# main.py
from log_config import logger
logger.debug("This is a debug log")
logger.info