一种logging封装方法,不会产生重复log
2024-09-01 15:58:49
在调试logging的封装的时候,发现已经调用了logging封装的函数,在被其它函数再调用时,会出现重复的logging。原因是不同的地方创建了不同的handler,所以会重复,可以使用暴力方法解决
暴力方式就是每次创建新的对象就清空logger.handlers
我常用的封装如下
import logging
import time,os
'''
使用方法:
import mylog
log = mylog.Log().getlog()
log.debug("###")
'''
class Log(): def __init__(self,logger="mylog"):
self.logger = logging.getLogger(logger)
self.logger.setLevel(logging.DEBUG)
self.log_time = "\\"+time.strftime("%Y-%m-%d_%H_%M", time.localtime())+".log"
# 在进程路径创建log文件夹
# self.log_path = os.path.join(os.getcwd() + "\\log")
# 固定在mylog上一级创建
self.log_path = os.path.join(os.path.dirname(os.path.dirname(__file__)) + "\\log")
if os.path.exists(self.log_path) and os.path.isdir(self.log_path):
pass
else:
os.makedirs(self.log_path)
self.log_name = os.path.join(self.log_path + self.log_time) #因为多出调用logger会生成多个handlers,所以每次调用清空handler
self.logger.handlers = []
fh = logging.FileHandler(self.log_name, 'a', encoding='utf-8')
formatter = logging.Formatter('[%(levelname)s][%(asctime)s] [%(filename)s]->[%(funcName)s] line:%(lineno)d ---> %(message)s')
fh.setLevel(logging.DEBUG)
fh.setFormatter(formatter)
self.logger.addHandler(fh) ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
ch.setFormatter(formatter)
self.logger.addHandler(ch) fh.close() def getlog(self):
return self.logger if __name__ == "__main__":
log = Log().getlog()
log.debug("hello")
最新文章
- [BZOJ4199][NOI2015]品酒大会
- ios开发中遇到的编译错误总结
- Sizeof的计算看内存分配
- 15_AOP入门准备_静态代理模式
- Linux企业级项目实践之网络爬虫(18)——队列处理
- String()与toString()区别和应用
- Handler和Message以及Looper之间的三角关系
- php 5.6,7.0静态方法调用和new调用方法性能差距
- MyBatis逆向工程自动生成代码
- 大数据入门基础系列之Hadoop1.X、Hadoop2.X和Hadoop3.X的多维度区别详解(博主推荐)
- mysql常用连接查询
- Centos 下添加开机自启动服务和脚本
- shell案例题
- Leetcode 1008. 先序遍历构造二叉树
- Android-Handler使用姿势
- 开放思源 专注高效 HPE&;msup软件技术开放日回顾
- CUDA C Programming Guide 在线教程学习笔记 Part 9
- lombok java代码助手
- Spring MVC @RequestParam
- PHP练习