前言:
一直都是手动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。