############### logging模块 ################
介绍:
# logging # 日志,用来保持增删查改的记录,一个记录没有了是没有创建,还是创建了又删除了,需要记录日志 # 有了log,就可以使用这个来替代print来调试程序,线上也需要日志来定位错误,排查问题,这是必须的, # 这些日志都是程序员写出来的,而且都是要输出到文件的, # 使用logging日志两种方式 # 1,简单配置,但是受到的局限比较大, # 2,配置logger对象, # 这两个是独立的,
简单配置:
# 简单配置 # 默认情况下只显示警告级别及以上信心 import logging file_handler = logging.FileHandler(filename='x1.log', mode='a', encoding='utf-8',) logging.basicConfig( format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S', handlers=[file_handler,], # 这种简单配置有一个大问题就是不能同时输出到文件和屏幕, level=logging.DEBUG # 这样都显示出来了,但是不能只打印某一种信息,只能说是打印这个级别以上的信息 ) logging.debug('debug message') # 调试模式,这个级别最低, logging.info('info message') # 显示正常的信息 logging.warning('warning message') # 显示警告信息 logging.error('error message') # 显示错误信息 logging.critical('critical message') # 显示严重错误信息
常用配置:
class Logger: def __init__(self): import logging self.logger = logging.getLogger() # 实例化一个logger对象 self.logger.setLevel(logging.DEBUG) # 设置打印级别 fh = logging.FileHandler('hwy404.log', encoding='utf-8') # 实例化一个文件句柄,创建一个handler,用于写入日志文件 ch = logging.StreamHandler() # 再创建一个handler,用于输出到控制台 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setLevel(logging.DEBUG) fh.setFormatter(formatter) ch.setFormatter(formatter) ch.setLevel(logging.INFO) self.logger.addHandler(fh) # logger对象可以添加多个fh和ch对象 self.logger.addHandler(ch) @property def get_log(self): """定义一个函数,回调logger实例""" return self.logger
用法:
a = Logger()
a.get_log.info("info message")
#####################################
解决python log模块重复打印日志问题 class Logger: def __init__(self): import logging self.logger = logging.getLogger() # 实例化一个logger对象 self.logger.setLevel(logging.DEBUG) # 设置打印级别 fh = logging.FileHandler('hwy404.log', encoding='utf-8') # 实例化一个文件句柄,创建一个handler,用于写入日志文件 ch = logging.StreamHandler() # 再创建一个handler,用于输出到控制台 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fh.setLevel(logging.DEBUG) fh.setFormatter(formatter) ch.setFormatter(formatter) ch.setLevel(logging.INFO) self.logger.addHandler(fh) # logger对象可以添加多个fh和ch对象 self.logger.addHandler(ch) # print(self.logger.handlers) # print(self.logger.handlers[:1]) # print(self.logger.handlers[-2:]) # self.logger.handlers = self.logger.handlers[:1] self.logger.handlers = self.logger.handlers[-2:] @property def get_log(self): """定义一个函数,回调logger实例""" return self.logger
思路:
原因是Logger类中的handlers列表中添加了多个对象;
所以,要解决这个问题,我的思路是清除handlers列表中多余的对象;
所以我们只需要一组对象即可,其他的清掉,虽然说是重复数据,其实不重复,他们是不同的对象,所以用set去重是不行的;
self.logger.handlers = self.logger.handlers[-2:]
#########################################
解决Python3 控制台输出InsecureRequestWarning问题 问题: 使用Python3 requests发送HTTPS请求,已经关闭认证(verify=False)情况下,控制台会输出以下错误: InsecureRequestWarning: Unverified HTTPS request is being made. Adding certificate verification is strongly advised.
See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings 解决方法: 在代码中添加以下代码即可解决: import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
######################################
解决屏蔽requests.packages.urllib3.connectionpool日志记录: 解决:屏蔽第三方库日志 requests 库日志屏蔽 logging.getLogger("requests").setLevel(logging.ERROR)
####################################