解决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 ...
随机推荐
- TCP/IP各层对应的协议
应用层: 该层包括所有和应用程序协同工作,利用基础网络交换应用程序专用的数据协议.如: HTTP:超文本传输协议. TELNET:(网络电传),通过一个终端(terminal)登录到网络(运行在TCP ...
- PAT 乙级 1044 火星数字 (20 分)
1044 火星数字 (20 分) 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, mar, apr, may, j ...
- selenium 目录结构解释
common目录 定义了通用的异常类 webdriver目录 android.backberry.chrome.edge.firefox.ie.opera.phantomjs.safa ...
- ibatis.net 循环
if (oReqV[0]["tag"] != null && !string.IsNullOrEmpty(oReqV[0]["tag"].ToS ...
- 码云Gitee上新建项目教程
1.在浏览器访问,https://gitee.com/: 2.使用用户名.密码登录: 3.在左下角显示当前用户的项目,点击“+”号,创建项目: 4.填写项目的相关信息,项目名称要和本地要上传的项目名称 ...
- Windows下MongoDB的安装
1.安装Window2008 R2 并安装 SP1(我安装的是英文版,之前有安装中文版出错) 2.安装vc——redist_x64.exe(不然mongo运行不起来),没安装Sp1前,安装此部会出错. ...
- expected_conditions模块提供了判断页面元素的16种方法
1.title_is: 判断当前页面的title是否完全等于(==)预期字符串,返回布尔值2.title_contains : 判断当前页面的title是否包含预期字符串,返回布尔值3.presenc ...
- 通过java程序调用ant build.xml配置文件中指定的target
一.概述 通过ant实现项目的自动化部署,jar包生成,替换,tomcat关停.启动,查看项目日志: 通过java程序调用已编辑好的ant脚本build.xml配置文件中指定的target: 文中文件 ...
- java面试题复习(一)
//基础最重要,如果面试官问一个答不上一个,那有难度的都都不用问了,直接就pass了,就像我,嘿嘿. //每天最好熟记10个问题,这些问题在编程是会很厚帮助,帮你避免很多不应该出现的错误. 一.面向对 ...
- .net Cache 需要注意的地方
CacheItemPolicy policy = new CacheItemPolicy { AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(ti ...