python 二次封装logging,打印日志文件名正确,且正确写入/结合pytest执行,日志不输出的问题
基于之前日志问题,二次封装日志后,导致日志输出的文件名不对,取到的文件一直都是当前二次封装的log的文件名,基于这个问题,做了优化,详细看
https://www.cnblogs.com/cuitang/p/16547816.html
存在问题:
封装模块名log_print
1、项目A依赖项目B的模块A,项目B的模块A使用的是项目B的log_print,里面配置的filehandler地址是不同的;在项目A使用时,默认取到了项目B模块的filehandler,导致将项目A的日志写到了项目B里面,这个是不对的;-- 产生问题的原因,handlers没有被关闭

2、使用pytest框架,执行测试用例,日志没有输出到控制台,也没有输出到文件
原来的日志模块设计:检测了当前没有日志的handlers,才会去创建,但pytest框架是有自带的loghandler, 所以在使用pytest执行用例时,来到创建这一步,判断已经存在,不会去创建我们自定义的log日志输出和写 入的handlers,所以最后执行完,控制台和日志文件都没有日志输出;-- 产生这个问题原因,也是 因为没有正确的关闭原有的handler,来重新创建自定义的handlers

代码优化:在初始化二次封装logging模块时,获取目前所有的handler,然后循环将其关闭;继续往下设计日志输出模式,然后重新创建,就可以避免以上的问题
def __init__(self):
self.logger = logging.getLogger() # print(f"获取当前的日志logger: {self.logger.handlers}")
# === 1、 在添加handlers之前,先将已存在的移除,后面再重新创建,可以防止日志重复 ===
while self.logger.hasHandlers():
for handler in self.logger.handlers:
self.logger.removeHandler(handler) self.logger.setLevel("DEBUG") # === 2、 设置日志输出格式 ===
self.log_colors_config = {
'DEBUG': 'cyan',
'INFO': 'green',
'WARNING': 'yellow',
'ERROR': 'red',
'CRITICAL': 'red',
} self.color_fmt = colorlog.ColoredFormatter(
'%(log_color)s%(asctime)s 【%(levelname)s】 [%(filename)s:%(funcName)s:%(lineno)s]-日志信息: %(message)s',
log_colors=self.log_colors_config) self.formatter = logging.Formatter(
'%(asctime)s 【%(levelname)s】 [%(filename)s:%(funcName)s:%(lineno)s]-日志信息: %(message)s') # === 3、 添加日志收集器: 控制台和文件输出
self.logger.addHandler(self.get_console_handler())
self.logger.addHandler(self.get_file_handler())
python 二次封装logging,打印日志文件名正确,且正确写入/结合pytest执行,日志不输出的问题的更多相关文章
- python 以单例模式封装logging相关api实现日志打印类
python 以单例模式封装logging相关api实现日志打印类 by:授客QQ:1033553122 测试环境: Python版本:Python 2.7 实现功能: 支持自由配置,如下lo ...
- python基础--包、logging、hashlib、openpyxl、深浅拷贝
包:它是一系列模块文件的结合体,表现形式就是一个文件夹,该文件夹内部通常会有一个__init__.py文件,包的本质还是一个模块. 首次导入包:(在导入语句中中 . 号的左边肯定是一个包(文件夹)) ...
- Selenium WebDriver Log4j打印执行日志
在自动化测试脚本的执行过程中,使用log4j在日志文件中打印执行日志,用于监控和后续调试脚本. Log4j.xml 文件 <log4j:configuration xmlns:log4j=&qu ...
- 采坑复盘:logging日志能用封装后的函数来打日志,发现filename一直显示封装logging函数的方法所在的文件名
问题: logging日志能用封装后的函数来打日志,发现filename一直显示封装logging函数的方法所在的文件名 原因: logging记录的是第一个函数执行所在的文件,那用封装的函数,首先执 ...
- python 项目实战之logging日志打印
官网介绍:https://docs.python.org/2/library/logging.html 一. 基础使用 1.1 logging使用场景 日志是什么?这个不用多解释.百分之九十的程序都需 ...
- python 自动化之路 logging日志模块
logging 日志模块 http://python.usyiyi.cn/python_278/library/logging.html 中文官方http://blog.csdn.net/zyz511 ...
- 【转】python模块分析之logging日志(四)
[转]python模块分析之logging日志(四) python的logging模块是用来写日志的,是python的标准模块. 系列文章 python模块分析之random(一) python模块分 ...
- python模块分析之logging日志(四)
前言 python的logging模块是用来设置日志的,是python的标准模块. 系列文章 python模块分析之random(一) python模块分析之hashlib加密(二) python模块 ...
- Python学习笔记:logging(日志处理)
在一个软件中,日志是可以说必不可少的一个组成部分,通常会在定位客户问题或者记录软件使用情况等场景中会用到.logging模板块是Python的一个内置标准库,用于实现对日志的控制输出,对于平常的日志输 ...
- 【python接口自动化】- logging日志模块
前言:我们之前运行代码时都是将日志直接输出到控制台,而实际项目中常常需要把日志存储到文件,便于查阅,如运行时间.描述信息以及错误或者异常发生时候的特定上下文信息. logging模块介绍 Pyth ...
随机推荐
- [FAQ] Win10 找到打开 hosts 文件
1. Win+R 打开运行窗口. 2. 输入命令 C:\Windows\System32\drivers\etc 回车. Refer:windows hosts Link:https://www.cn ...
- 2018-8-10-win10-uwp-App-to-app-communication-应用通信
title author date CreateTime categories win10 uwp App-to-app communication 应用通信 lindexi 2018-08-10 1 ...
- 电路笔记03—kcl、kvl,独立源,受控源
电路笔记03-kcl.kvl,独立源,受控源 听起来简单,做起来需要思考.所以做作业,思考很有 必要.电路的功率守恒,4种受控源,用两类约束列方程.电路分析力最难的一部分,怎么把一个量用其它量表示,后 ...
- 最近常用的几个【行操作】的Pandas函数
最近在做交易数据的统计分析时,多次用到数据行之间的一些操作,对于其中的细节,简单做了个笔记. 1. shfit函数 shift函数在策略回测代码中经常出现,计算交易信号,持仓信号以及资金曲线时都有涉及 ...
- SqlServer2008R2 在开始菜单中找不到配置管理器
直接找到C:\Windows\SysWOW64\SQLServerManager10.msc,打开即可.
- 在英特尔至强 CPU 上使用 🤗 Optimum Intel 实现超快 SetFit 推理
在缺少标注数据场景,SetFit 是解决的建模问题的一个有前途的解决方案,其由 Hugging Face 与 Intel 实验室 以及 UKP Lab 合作共同开发.作为一个高效的框架,SetFit ...
- pikachu靶机练习平台-xss
第一题:反射性xss(get) 输出的字符出现在url中 第二题:反射性xss(post) 登录后输入<script>alert(1)</script> 第三题:存储型xss ...
- python—CSV的读写
目录 csv文件 打开模式 1.写入数组类型数据 2.写入字典序列类型数据 3.csv的读取 csv文件 CSV是一种以逗号分隔数值的文件类型,在数据库或电子表格中,常见的导入导出文件格式就是CSV格 ...
- PPO近端策略优化玩cartpole游戏
这个难度有些大,有两个policy,一个负责更新策略,另一个负责提供数据,实际这两个policy是一个东西,用policy1跑出一组数据给新的policy2训练,然后policy2跑数据给新的poli ...
- GROK 表达式
GROK 表达式 常用表达式 标识:USERNAME 或 USER 正则:[a-zA-Z0-9._-]+ 名称:用户名 描述:由数字.大小写及特殊字符(._-)组成的字符串 例子:1234.Bob.A ...