|
日志主要用于记录程序运行情况,以便程序报错能够快速定位到问题。Python自带日志操作模块,即logging模块。一、Logging模块1、日志等级划分及作用 日志有6个等级,等级由低到高分别是NOTEST#自定义logger对象logger2=logging.getLogger(__name__)print(logger2)#结果值: logger很明显的缺点是无法多进程,例如给对象logger1设置日志级别,logger2的日志级别也同时改变了。4.2handler: handler对象用于将日志记录发送到指定的位置,这个位置可以是控制台、文件、网络等。不同的handler负责将日志发送到不同的位置。常用的handler有StreamHandler(发送到控制台)、FileHandler(发送到文件)、SMTPHandler(发送到邮件)、HTTPHandler(通过HTTP发送日志)。#导入日志模块importlogginglogger=logging.getLogger(__name__)logger.setLevel(logging.DEBUG)handler=logging.StreamHandler()handler.setLevel(logging.DEBUG)logger.addHandler(handler)logger.debug("这是一个从控制台输出的DEBUG级别日志")4.3Formatter: Formatter用于设置日志输出最终格式,可以为每个handler设置不同Formatter。#导入日志模块importlogginglogger=logging.getLogger(__name__)logger.setLevel(logging.DEBUG)handler=logging.StreamHandler()handler.setLevel(logging.DEBUG)#设置日志输出格式formatter=logging.Formatter("%(asctime)s-%(message)s",datefmt='%Y-%m-%d%H:%M:%S')handler.setFormatter(formatter)logger.addHandler(handler)logger.debug("这是一个从控制台输出的DEBUG级别日志")4.4Filter: Filter(过滤器)用于决定日志内容是否被输出,可以依据各种标准,例如日志内容、日志级别、logger名称等。而且,每个handler可以设置多个Filter。#导入日志模块importlogginglogger=logging.getLogger('main')logger.setLevel(logging.DEBUG)print(logger)handler=logging.StreamHandler()handler.setLevel(logging.DEBUG)#设置日志输出格式formatter=logging.Formatter("%(asctime)s-%(message)s",datefmt='%Y-%m-%d%H:%M:%S')handler.setFormatter(formatter)logger.addHandler(handler)#定义Filter过滤器:判断给定字符与logger的名称前缀是否匹配#默认全匹配,可选操作flt=logging.Filter('main')logger.addFilter(flt)logger.debug("这是一个从控制台输出的DEBUG级别日志")二、实例 设置三个handler,第一个输出到文件中,记录详细日志内容;第二个输出到控制台,记录详细日志内容;第三个输出到文件中,记录ERROR级别日志内容。1、新建配置模块log_setting1.py#导入日志模块importloggingdefset_log_config(set_level):#得到logger对象logger=logging.getLogger()logger.setLevel(set_level)#设置第一个handlerinfo_handler=logging.FileHandler(filename='../settings/info_log.log',mode='a',encoding='utf-8')logger.addHandler(info_handler)#设置第二个handlerstream_handler=logging.StreamHandler()logger.addHandler(stream_handler)#设置第三个handlererr_handler=logging.FileHandler(filename='../settings/err_log.log',mode='a',encoding='utf-8')err_handler.setLevel(logging.ERROR)logger.addHandler(err_handler)#设置输出格式formatter=logging.Formatter(fmt='%(asctime)s-%(message)s',datefmt='%Y-%m-%d%H:%M:%S')info_handler.setFormatter(formatter)stream_handler.setFormatter(formatter)err_handler.setFormatter(formatter)2、新建程序入口importloggingfromsettings.log_setting1importset_log_configset_log_config('DEBUG')logging.info('这是一个info级别的日志')logging.debug('这是一个debug级别的日志')logging.warning('这是一个warning级别的日志')logging.error('这是一个error级别的日志')3、输出结果 控制台输出结果为:2024-06-2817:17:35-这是一个info级别的日志2024-06-2817:17:35-这是一个debug级别的日志2024-06-2817:17:35-这是一个warning级别的日志2024-06-2817:17:35-这是一个error级别的日志 在指定目录下生成info_log.log和err_log.log文件,在info_log.log中与控制台输出内容一致;在err_log.log中仅展示ERROR级别的日志信息。
|
|