Python不会调试不够丝滑?那事你不会logging---剖析!

前言:

一直都是手动debug进行调试,F8都按烂了;最近用logging进行提前布置,发现这样更能让代码走得丝滑,同时也能尽早发现问题!

基本概念:


Logger - 日志记录接口
Handler - 确定日志记录发送到不同的地方(文件、控制台等)
Level - 定义了日志的严重性级别(DEBUG、INFO、WARNING、ERROR、CRITICAL)
Formatter - 定义日志的布局,即格式

举例子(logging模块,简单):

import logging

# 配置日志基础参数:级别和格式
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')

# 创建一个logger
logger = logging.getLogger(__name__)

# 日志消息示例
logger.debug('这是 debug 级别的日志,通常用于调试')
logger.info('这是 info 级别的日志,常规操作消息')
logger.warning('这是 warning 级别的日志,指示有潜在问题')
logger.error('这是 error 级别的日志,标识操作中的严重问题')
logger.critical('这是 critical 级别的日志,指严重的错误')

# 输出将会是info及以上级别的日志,因为配置了level=logging.INFO
请注意这个例子中,只有INFO级别及以上级别的日志信息(Default level)会被输出到控制台,因为我们在basicConfig中设置了级别为INFO。如果需要将消息存储在文件中,而不是在控制台输出,则需要将handers添加到logger中。如果同时将日志打印至控制台和写入文件,可以另外添加StreamHandler和FileHandler到你的logger。

举例子(输出到控制台和文件):

import logging

# 首先,创建一个Logger对象
logger = logging.getLogger('my_logger')
logger.setLevel(logging.DEBUG)  # 设置捕捉所有级别日志

# 接着,创建Formatter对象以设定日志格式
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')

# 创建一个StreamHandler实例用于输出到控制台
console_handler = logging.StreamHandler()
console_handler.setLevel(logging.INFO)  # 设置只输出INFO级别及以上的日志到控制台
console_handler.setFormatter(formatter)  # 应用日志格式

# 创建一个FileHandler实例用于写入文件,例如写入example.log
file_handler = logging.FileHandler('example.log')
file_handler.setLevel(logging.DEBUG)  # 设置记录DEBUG级别及以上的日志到文件
file_handler.setFormatter(formatter)  # 应用日志格式

# 添加之前创建的Handler至logger
logger.addHandler(console_handler)
logger.addHandler(file_handler)

# 记录不同级别日志的示例
logger.debug('这是DEBUG级别的信息,因为FileHandler设置为DEBUG级别,所以它能记录在文件里。')
logger.info('这是INFO级别的信息,Info级别的日志会输出在控制台。')
logger.warning('这是WARNING级别的信息,会既出现在控制台也会记录在文件中。')
logger.error('这是ERROR级别的信息,会既出现在控制台也会记录在文件中。')
logger.critical('这是CRITICAL级别的信息,会既出现在控制台也会记录在文件中。')

#  现在,在控制台上将会看到INFO及更高级别的日志,
#  而在“example.log”文件中将会看到DEBUG及更高级别的日志。
级别为DEBUG以上的日志会被写入example.log文件,而控制台只会显示INFO级别及以上的日志信息。通过调整setLevel方法的参数,你可以自定义不同Handler所处理的日志级别。记得最后调用addHandler方法将handler添加至logger。


 




最后经验分享:

在生产中应用:

在生产环境中不要使用print语句,而应该使用一个配置良好的日志系统;这能够提供灵活的日志管理。

避免过多无关日志:

过多的日志可以隐藏真正重要的信息,合理设定日志级别,捕获关键信息。

异步/队列日志记录:

高并发应用中,考虑使用异步方式记录日志或者使用消息队列来减少日志记录对性能的影响。

你可能感兴趣的:(15天玩转高级python,python,数据库)