找回密码
 会员注册
查看: 49|回复: 0

python——日志模块

[复制链接]

2万

主题

0

回帖

7万

积分

超级版主

积分
71047
发表于 2024-9-5 19:09:29 | 显示全部楼层 |阅读模式
日志主要用于记录程序运行情况,以便程序报错能够快速定位到问题。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级别的日志信息。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-9 04:37 , Processed in 0.674561 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表