成都营销型网站公司电话,南京设计公司网站,做游戏钓鱼网站,新建网站解析域名前言:
一直都是手动debug进行调试,F8都按烂了;最近用logging进行提前布置,发现这样更能让代码走得丝滑,同时也能尽早发现问题!
基本概念#xff1a; Logger - 日志记录接口 Handler - 确定日志记录发送到不同的地方#xff08;文件、控制台等#xff09; Level - 定义了日…前言:
一直都是手动debug进行调试,F8都按烂了;最近用logging进行提前布置,发现这样更能让代码走得丝滑,同时也能尽早发现问题!
基本概念 Logger - 日志记录接口 Handler - 确定日志记录发送到不同的地方文件、控制台等 Level - 定义了日志的严重性级别DEBUG、INFO、WARNING、ERROR、CRITICAL Formatter - 定义日志的布局即格式 举例子(logging模块,简单):
import logging# 配置日志基础参数级别和格式
logging.basicConfig(levellogging.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及以上级别的日志,因为配置了levellogging.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语句而应该使用一个配置良好的日志系统这能够提供灵活的日志管理。
避免过多无关日志
过多的日志可以隐藏真正重要的信息合理设定日志级别捕获关键信息。
异步/队列日志记录
高并发应用中考虑使用异步方式记录日志或者使用消息队列来减少日志记录对性能的影响。