在调试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")

最新文章

  1. [BZOJ4199][NOI2015]品酒大会
  2. ios开发中遇到的编译错误总结
  3. Sizeof的计算看内存分配
  4. 15_AOP入门准备_静态代理模式
  5. Linux企业级项目实践之网络爬虫(18)——队列处理
  6. String()与toString()区别和应用
  7. Handler和Message以及Looper之间的三角关系
  8. php 5.6,7.0静态方法调用和new调用方法性能差距
  9. MyBatis逆向工程自动生成代码
  10. 大数据入门基础系列之Hadoop1.X、Hadoop2.X和Hadoop3.X的多维度区别详解(博主推荐)
  11. mysql常用连接查询
  12. Centos 下添加开机自启动服务和脚本
  13. shell案例题
  14. Leetcode 1008. 先序遍历构造二叉树
  15. Android-Handler使用姿势
  16. 开放思源 专注高效 HPE&msup软件技术开放日回顾
  17. CUDA C Programming Guide 在线教程学习笔记 Part 9
  18. lombok java代码助手
  19. Spring MVC @RequestParam
  20. PHP练习

热门文章

  1. python编程基础之二十四
  2. hihoCode 1075 : 开锁魔法III
  3. C# MQTT mqtt客户端,发布订阅消息
  4. python requests自动化框架
  5. Jenkins介绍
  6. DNS记录类型
  7. PHP get_object_vars 和 get_class_vars
  8. c++11::std::optional
  9. python编程系列---args与kwargs详解
  10. 远程桌面连接(mstsc)