Python logging 日志
Python 的 logging 模块为我们提供了一种灵活且强大的日志记录机制,可以帮助我们追踪程序的运行状况,方便调试和排错。
核心组件
- Logger:日志记录器,表示一个特定的日志通道。
- Handler:日志处理器,决定日志消息发送到哪里,比如控制台、文件、邮件等。
- Formatter:日志格式化器,控制日志消息的格式。
- Filter:日志过滤器,决定哪些日志记录应该被处理器处理。
基本用法
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import logging
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)
logger.debug('这是一个调试信息') logger.info('一条信息') logger.warning('发生了一些意外') logger.error('出现了一个错误') logger.critical('严重错误')
|
日志级别
- DEBUG:详细的调试信息。
- INFO:确认程序正常运行的信息。
- WARNING:表示发生了一些意外,或者预示着未来可能出现问题。
- ERROR:由于较严重的问题,程序无法执行某些功能。
- CRITICAL:严重错误,表示程序可能无法继续运行。
自定义日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| import logging
logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG)
file_handler = logging.FileHandler('my_app.log') file_handler.setLevel(logging.INFO)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') file_handler.setFormatter(formatter)
lo gger.addHandler(file_handler)
logger.debug('调试信息') logger.info('信息')
|
其他功能
- 多个处理器:可以向一个日志记录器添加多个处理器,将日志发送到不同的地方。
- 过滤器:可以根据级别、记录器名称或其他条件过滤日志记录。
- 日志记录属性:日志记录包含额外信息,如时间戳、进程ID等。
- 配置文件:可以使用配置文件管理日志设置。
例子:使用 JSON 格式的结构化日志
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| import logging import json
class CustomFormatter(logging.Formatter): def format(self, record): log_dict = { 'timestamp': self.formatTime(record, self.datefmt), 'level': record.levelname, 'message': record.msg, } return json.dumps(log_dict)
|
总结
Python 的 logging 模块为我们提供了强大的日志功能,通过合理配置和使用,可以帮助我们更好地理解程序的运行状态,定位问题,提高程序的稳定性和可维护性。在实际开发中,我们需要根据不同的应用场景,选择合适的日志级别、处理器、格式化器和过滤器,以达到最佳的日志效果。