python中如何自定义封装带颜色的logging模块
发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,本文小编为大家详细介绍"python中如何自定义封装带颜色的logging模块",内容详细,步骤清晰,细节处理妥当,希望这篇"python中如何自定义封装带颜色的logging模块"文章能帮助大家解决
千家信息网最后更新 2024年11月26日python中如何自定义封装带颜色的logging模块
本文小编为大家详细介绍"python中如何自定义封装带颜色的logging模块",内容详细,步骤清晰,细节处理妥当,希望这篇"python中如何自定义封装带颜色的logging模块"文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
自己在搭建python接口自动化框架 分享一些内容过程中想自己封装一个logger方法 根据logging进行二次封装 代码如下
import loggingimport osimport timeimport colorlogfrom logging.handlers import RotatingFileHandler# 创建文件目录cur_path = os.path.dirname(os.path.realpath(__file__)) # log_path是存放日志的路径log_path = os.path.join(os.path.dirname(cur_path), 'logs')if not os.path.exists(log_path): os.mkdir(log_path) # 如果不存在这个logs文件夹,就自动创建一个# 修改log保存位置timestamp = time.strftime("%Y-%m-%d", time.localtime())logfile_name = '%s.log' % timestamplogfile_path = os.path.join(log_path, logfile_name)# 定义不同日志等级颜色log_colors_config = { 'DEBUG': 'bold_cyan', 'INFO': 'bold_green', 'WARNING': 'bold_yellow', 'ERROR': 'bold_red', 'CRITICAL': 'red',}class Logger(logging.Logger): def __init__(self, name, level='DEBUG', file=None, encoding='utf-8'): super().__init__(name) self.encoding = encoding self.file = file self.level = level # 针对所需要的日志信息 手动调整颜色 formatter = colorlog.ColoredFormatter( '%(log_color)s%(levelname)1.1s %(asctime)s %(reset)s| %(message_log_color)s%(levelname)-8s %(reset)s| %(' 'log_color)s[%(filename)s%(reset)s:%(log_color)s%(module)s%(reset)s:%(log_color)s%(funcName)s%(' 'reset)s:%(log_color)s%(''lineno)d] %(reset)s- %(white)s%(message)s', reset=True, log_colors=log_colors_config, secondary_log_colors={ 'message': { 'DEBUG': 'blue', 'INFO': 'blue', 'WARNING': 'blue', 'ERROR': 'red', 'CRITICAL': 'bold_red' } }, style='%' ) # 日志输出格式 # 创建一个FileHandler,用于写到本地 rotatingFileHandler = logging.handlers.RotatingFileHandler(filename=logfile_path, maxBytes=1024 * 1024 * 50, backupCount=5) rotatingFileHandler.setFormatter(formatter) rotatingFileHandler.setLevel(logging.DEBUG) self.addHandler(rotatingFileHandler) # 创建一个StreamHandler,用于输出到控制台 console = colorlog.StreamHandler() console.setLevel(logging.DEBUG) console.setFormatter(formatter) self.addHandler(console) self.setLevel(logging.DEBUG)logger = Logger(name=logfile_path, file=logfile_path)
使用时我们只需要引入封装好的类就行 直观美丽大方~
# 引入封装好的logger模块from common.logger_handler import loggerdef physical_strength(self, abnormal): """兑换体力异常通用方法""" if self.attrs.__contains__('costType'): attrs_Type = { "costType": abnormal, "count": self.attrs["count"] } response_Type = r().response(self.send_uid, self.code, self.event, attrs_Type) # 使用时直接调用logger.info()就行 logger.info(f"physical_strength_{abnormal},response_Type:{response_Type}") assert response_Type["code"] != 0 time.sleep(2) attrs_count = { "costType": self.attrs["costType"], "count": abnormal } response_count = r().response(self.send_uid, self.code, self.event, attrs_count) logger.info(f"physical_strength_{abnormal},response_count:{response_count}") assert response_count["code"] != 0 time.sleep(2) attrs_all = { "costType": abnormal, "count": abnormal } response_all = r().response(self.send_uid, self.code, self.event, attrs_all) logger.info(f"physical_strength_{abnormal},response_all:{response_all}") assert response_all["code"] != 0 time.sleep(2) else: attrs_count = { "count": abnormal } response_count = r().response(self.send_uid, self.code, self.event, attrs_count) logger.info(f"physical_strength_{abnormal},response_count:{response_count}") assert response_count["code"] != 0 time.sleep(2)
效果:按照 日期/时间/日志等级/文件名称/类/方法名称/代码行数展示(这里可以自己手动调整formatter参数 如果感觉展示太长的话)
%(levelno)s: 打印日志级别的数值
%(levelname)s: 打印日志级别名称
%(pathname)s: 打印当前执行程序的路径,其实就是sys.argv[0]
%(filename)s: 打印当前执行程序名
%(funcName)s: 打印日志的当前函数
%(lineno)d: 打印日志的当前行号
%(asctime)s: 打印日志的时间
%(thread)d: 打印线程ID
%(threadName)s: 打印线程名称
%(process)d: 打印进程ID
%(message)s: 打印日志信息
避坑:不要用这种方式去调用日志等级方法 会出现日志打印定位路径错误 只能定位在log封装类当前方法下
def debug(self, message): self.__console('debug', message) def info(self, message): self.__console('info', message) def warning(self, message): self.__console('warning', message) def error(self, message): self.__console('error', message)
读到这里,这篇"python中如何自定义封装带颜色的logging模块"文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注行业资讯频道。
日志
封装
颜色
方法
模块
名称
内容
文件
文章
等级
路径
代码
信息
手动
时间
程序
级别
线程
定位
调整
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
免费建vpn服务器
奉贤区个性化网络技术转让哪里好
周汉华 网络安全法
数据库识别用户
通信网络技术的发展及其未来方向
本科软件开发学什么
数据库三元关系的联系
张震岳吉他谱软件开发
湛江有什么软件开发公司
怎么占用服务器内存
远程许可证管理服务器怎么设置
软件开发和研发
无棣鑫岳化工网络安全
商城数据库如何对接仓库系统
服务器如何防止托管数据丢失
csgo最牛外挂暂停服务器
网络安全周青少年日活动讲话
网络安全校园广播宣传
抗投诉美国服务器
软件开发违约金怎么赔偿
软件开发三大件
自己做服务器要多少宽带
网络安全的测量
网络安全工程师找工作看文凭吗
永川区网络软件开发服务公司
软件开发和web有啥区别
关系数据库的特征
中山专业软件开发价目表
网络安全资料z
江苏电子软件开发代理价钱