解决python logging重复写日志问题
import logging
from homework.exam_homework_0413.common import contants
from homework.exam_homework_0413.common.read_config import config def get_logger(name):
logger=logging.getLogger(name)
logger.setLevel(config.get_strValue("log","logger_level"))
fmt="%(asctime)s - %(name)s - %(levelname)s - %(message)s - [%(filename)s:%(lineno)d]"
formatter=logging.Formatter(fmt=fmt) console_handler=logging.StreamHandler()
console_handler.setLevel(config.get_strValue("log","console_level"))
console_handler.setFormatter(formatter) file_handler=logging.FileHandler(contants.log_dir+"/case.log",encoding='utf-8')
file_handler.setLevel(config.get_strValue("log","file_level"))
file_handler.setFormatter(formatter) logger.addHandler(console_handler)
logger.addHandler(file_handler) return logger
问题:
日志封装成类/函数(如上面logger.py模块,将日志封装成get_logger()函数),使用下面方式调用get_logger()函数,会出现重复写日志问题,如第一条打印一遍,第二条打印2遍 第3条打印3遍...
if __name__=='__main__':
get_logger(__name__).debug("这是bug")
get_logger(__name__).info("这是info")
get_logger(__name__).warning("这是warning")
结果:
2019-04-29 15:57:09,491 - __main__ - DEBUG - 这是bug - [logger.py:33]
2019-04-29 15:57:09,491 - __main__ - INFO - 这是info - [logger.py:34]
2019-04-29 15:57:09,491 - __main__ - INFO - 这是info - [logger.py:34]
2019-04-29 15:57:09,492 - __main__ - WARNING - 这是warning - [logger.py:35]
2019-04-29 15:57:09,492 - __main__ - WARNING - 这是warning - [logger.py:35]
2019-04-29 15:57:09,492 - __main__ - WARNING - 这是warning - [logger.py:35]
解决方法:
每条日志使用同一个对象/函数调用
if __name__=='__main__':
logger=get_logger(__name__)
logger.debug("这是bug")
logger.info("这是info")
logger.warning("这是warning")
结果:
2019-04-29 16:03:24,655 - __main__ - DEBUG - 这是bug - [logger.py:34]
2019-04-29 16:03:24,655 - __main__ - INFO - 这是info - [logger.py:35]
2019-04-29 16:03:24,655 - __main__ - WARNING - 这是warning - [logger.py:36]
解决python logging重复写日志问题的更多相关文章
- python logging 重复写日志问题
用Python的logging模块记录日志时,遇到了重复记录日志的问题,第一条记录写一次,第二条记录写两次,第三条记录写三次...很头疼,这样记日志可不行.网上搜索到了原因与解决方案: 原因:没有移除 ...
- [已解决] Python logging 重复打印日志信息
问题描述 问题代码如下: def get_logger(logger_name): """得到日志对象""" logger = loggin ...
- Python Logging模块 输出日志颜色、过期清理和日志滚动备份
# coding:utf-8 import logging from logging.handlers import RotatingFileHandler # 按文件大小滚动备份 import co ...
- 0x03 Python logging模块之Formatter格式
目录 logging模块之Formatter格式 Formater对象 日志输出格式化字符串 LogRecoder对象 时间格式化字符串 logging模块之Formatter格式 在记录日志是,日志 ...
- python logging 日志轮转文件不删除问题的解决方法
项目使用了 logging 的 TimedRotatingFileHandler : #!/user/bin/env python # -*- coding: utf-8 -*- import log ...
- paip.日志中文编码原理问题本质解决python
paip.日志中文编码原理问题本质解决python 默认的python日志编码仅仅gbk...保存utf8字符错误..输出到个eric5的控制台十默认好像十unicode的,要是有没显示出来的字符,大 ...
- python找寻合适的日志库logging Handler——Handler自定义实现
最近在用python tornado开发一个app的服务端.投产的系统肯定需要包含日志功能,这里就自然想到了用python自带的logging库. logging中日志内容的输出都交由Handle ...
- python中利用logging包进行日志记录时的logging.level设置选择
之前在用python自带的logging包进行日志输出的时候发现有些logging语句没有输出,感到比较奇怪就去查了一下logging文档.然后发现其在设置和引用时的logging level会影响最 ...
- python logging 日志轮转文件不删除问题
前言 最近在维护项目的python项目代码,项目使用了 python 的日志模块 logging, 设定了保存的日志数目, 不过没有生效,还要通过contab定时清理数据. 分析 项目使用了 logg ...
随机推荐
- 从容器里dump java堆实验探索(原创)
目标:从docker容器里dump java堆 模拟程序 占用空间500M, 设置启动JVM参数 docker启动命令 (PS:经过测试,至少要650M才能启动容器) 方式1: 通过docker ex ...
- Java核心-多线程-并发控制器-CyclicBarrier同步屏障
1.基本概念 中文译本同步屏障,同样来自jdk并发工具包中一个并发控制器,它的使用和CountDownLatch有点相似,能够完成某些相同并发场景,但是它们却不相同. 2.抽象模型 主要用来实现多个线 ...
- 通过jedis远程访问redis服务器
一.jedis简介 类似于mysql数据库,一般开发都需要通过代码去访问redis服务器,对于主流的开发语言,redis提供了访问的客户端接口. https://redis.io/clients 而对 ...
- 巨坑– 膜BWV543
我不是一个喜欢膜别人的人,我从来都不擅长去夸奖.当面对巴赫的作品时,我发现我的敬佩难以用语言表达.我决定用另一种方式来表达我的欣赏,那就是分析并背下这个谱子. http://music.163.com ...
- CSS——Flex
任何一个容器都可以指定为Flexbox布局 .flex-container { display: -webkit-flex; /* Safari */ display: flex; } 行内元素可以指 ...
- 微服务架构基础之Service Mesh
ServiceMesh(服务网格) 概念在社区里头非常火,有人提出 2018 年是 ServiceMesh 年,还有人提出 ServiceMesh 是下一代的微服务架构基础. 那么到底什么是 Serv ...
- 【转】配置Exchange 2010 服务器(二)Exchange2010证书配置
原文链接:http://blog.51cto.com/shubao/788562 (一)架设证书服务器 (二)Exchange2010申请证书 (三)证书服务器导入Exchange服务器受信任根证书 ...
- 分布式之redis核心知识盘点?
考虑到绝大部分写业务的程序员,在实际开发中使用redis的时候,只会setvalue和getvalue两个操作,对redis整体缺乏一个认知.又恰逢博主某个同事下周要去培训redis,所以博主斗胆以r ...
- C++_数字时钟软件实现设计
利用C++学习内容,通过windows自带函数实现一个简易的时钟 #include<iostream> #include<windows.h> //延时与清屏头文件 using ...
- dubbo . dubbo Please check registry access list (whitelist/blacklist) 错误
dubbo Please check registry access list (whitelist/blacklist) dubbo服务调用provider失败.解决办法: 再consumer的服务 ...