logger.setLevel(level)方法配置过滤日志级别
根据源码可以看到参数level可以使int类型或者string类型,
以debug级别为例,level写int类型: logger.setLevel(10)
;
level写str类型:logger.setLevel(logging.DEBUG)
这种比较直观
def setLevel(self, level):
"""
Set the logging level of this logger. level must be an int or a str.
"""
self.level = _checkLevel(level)
self.manager._clear_cache()
级别(高到低):CRITICAL、ERROR、WARNING、INFO、DEBUG、NOTSET;
对应int:CRITICAL = 50
、ERROR = 40
、WARNING = 30
、INFO = 20
、DEBUG = 10
、NOTSET = 0
handler对象负责根据日志级别分配日志消息的最终流向。Logger对象默认不包含handler对象,但是可用通过addHandler()方法添加。举例一个应用场景:假设你的应用程序需要将所有日志消息保存在日志文件中;把ERROR级别及以上的日志打印在标准输出;所有的CIRITCAL级别的日志通过电子邮件发给你。整个场景需要三个handler实例,每个实例都会根据不同的日志级别采取不同的方式处理日志消息。来源
logging核心模块仅包含基本的一些handler类(NullHandler、StreamHandler和FileHandler),剩下的handler并不直接可用,而是需要主动导入logging.handlers和logging.config。
用的是handler的setLevel()
方法,和logger的长得一样,但是效果不一样。logger.setLevel()
决定了能够被传递到handler对象的最低级别。而handler.setLevel()
决定了会被记录下来的最低日志级别,如果不设置默认使用logger的日志级别。
设置日志输出格式靠的是Formatter对象,例子:
format = logging.Formatter(fmt='%(asctime)s - %(levelname)s - %(funcName)s - %(message)s', datefmt='%Y年%m月%d日 %H:%M:%S')
打印出来的日志:
2022年06月09日 15:17:02 - INFO - read_get_token_yaml - 加载./interface_data_yaml/get_token.yaml文件......
format参数中可能用到的格式化串:来源
log_util.py文件
def get_logger(name):
logger = logging.getLogger(name)
logger.setLevel(10) # 设置总日志等级
format = logging.Formatter(fmt='%(asctime)s - %(levelname)s - %(funcName)s - %(message)s', datefmt='%Y年%m月%d日 %H:%M:%S') # 日志格式
cli_handler = logging.StreamHandler() # 输出到屏幕的日志处理器
file_handler = logging.FileHandler(filename='E:/1229Py/log/run.log', mode='a', encoding='utf-8') # 输出到文件的日志处理器,mode默认是’a’,即添加到文件末尾,‘w’是覆盖写入
cli_handler.setFormatter(format) # 设置屏幕日志格式
file_handler.setFormatter(format) # 设置文件日志格式
cli_handler.setLevel(logging.INFO) # 设置屏幕日志等级, 可以大于日志记录器设置的总日志等级
# file_handler.setLevel(logging.DEBUG) # 不设置默认使用logger的等级
logger.handlers.clear() # 清空已有处理器, 避免继承了其他logger的已有处理器
logger.addHandler(cli_handler) # 将屏幕日志处理器添加到logger
logger.addHandler(file_handler) # 将文件日志处理器添加到logger
return logger
yaml_util.py调用:
logger = get_logger('logger')
#读取yaml文件
def read_get_token_yaml(yaml_path):
logger.info("加载{}文件......".format(yaml_path))
with open(os.getcwd()+yaml_path,encoding="utf-8",mode="r") as f:
value = yaml.load(stream=f,Loader=yaml.FullLoader)
logger.info("读取到的数据===>{}".format(value))
return value
log文件记录到的日志:
2022年06月09日 15:17:02 - INFO - read_get_token_yaml - 加载./interface_data_yaml/get_token.yaml文件......
2022年06月09日 15:17:02 - INFO - read_get_token_yaml - 读取到的数据===>[{'name': '获取token的接口', 'request': {'method': 'post', 'url': 'http://192.168.00.00:9999/auth/uCmttLogin', 'params': {'username': 13408000000, 'password': 123456}}, 'validate': 'None'}]
2022年06月09日 15:17:03 - INFO - wirte_extract_yaml - 写入方法收到的access_token===>{'access_token': 'c19b2d524775b3e8d069b7573d5be49c5e1419401ad1897d28715975d0f2c43558'}
2022年06月09日 15:17:03 - INFO - wirte_extract_yaml - 写入方法的返回值===>None
待完善