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重复写日志问题的更多相关文章

  1. python logging 重复写日志问题

    用Python的logging模块记录日志时,遇到了重复记录日志的问题,第一条记录写一次,第二条记录写两次,第三条记录写三次...很头疼,这样记日志可不行.网上搜索到了原因与解决方案: 原因:没有移除 ...

  2. [已解决] Python logging 重复打印日志信息

    问题描述 问题代码如下: def get_logger(logger_name): """得到日志对象""" logger = loggin ...

  3. Python Logging模块 输出日志颜色、过期清理和日志滚动备份

    # coding:utf-8 import logging from logging.handlers import RotatingFileHandler # 按文件大小滚动备份 import co ...

  4. 0x03 Python logging模块之Formatter格式

    目录 logging模块之Formatter格式 Formater对象 日志输出格式化字符串 LogRecoder对象 时间格式化字符串 logging模块之Formatter格式 在记录日志是,日志 ...

  5. python logging 日志轮转文件不删除问题的解决方法

    项目使用了 logging 的 TimedRotatingFileHandler : #!/user/bin/env python # -*- coding: utf-8 -*- import log ...

  6. paip.日志中文编码原理问题本质解决python

    paip.日志中文编码原理问题本质解决python 默认的python日志编码仅仅gbk...保存utf8字符错误..输出到个eric5的控制台十默认好像十unicode的,要是有没显示出来的字符,大 ...

  7. python找寻合适的日志库logging Handler——Handler自定义实现

    最近在用python tornado开发一个app的服务端.投产的系统肯定需要包含日志功能,这里就自然想到了用python自带的logging库.   logging中日志内容的输出都交由Handle ...

  8. python中利用logging包进行日志记录时的logging.level设置选择

    之前在用python自带的logging包进行日志输出的时候发现有些logging语句没有输出,感到比较奇怪就去查了一下logging文档.然后发现其在设置和引用时的logging level会影响最 ...

  9. python logging 日志轮转文件不删除问题

    前言 最近在维护项目的python项目代码,项目使用了 python 的日志模块 logging, 设定了保存的日志数目, 不过没有生效,还要通过contab定时清理数据. 分析 项目使用了 logg ...

随机推荐

  1. MFC如何添加背景图片

    1.在xxDlg.h中定义CBrush m_brush 2.在对话框的消息响应中添加一个ON_WM_CTLCOLOR消息响应 3.添加背景图(方法前一篇随笔有讲到) 4.OnCtlColor消息响应函 ...

  2. 2019年1月16日22:50:28 白糖SR1905

    很好的机会,只拿了点皮毛,如果说都是因为上班时间不充裕那是给自己找借口,最主要原因没别的:思维不清,策略不明- 这里的入场初衷是周线区间下沿,日线向下脱离中枢失败后回拉一笔,那么这一单的做法就应该很明 ...

  3. 如何以system身份运行指定的程序?

    Local System(本地系统)是Windows操作系统内置的特殊账户.它拥有比Administartor更高的权限.smss.exe(会话管理器).csrss.exe(客户端/服务器运行时子系统 ...

  4. (转)SQLServer_十步优化SQL Server中的数据访问 三

    原文地址:http://tech.it168.com/a2009/1125/814/000000814758_all.shtml 第六步:应用高级索引 实施计算列并在这些列上创建索引 你可能曾经写过从 ...

  5. C#拷贝一个库的表到另外一个库中(的四种方式)

    1.该方法 基本不能用于实际开发中 ,仅供学习参考 public string Copy() { //要复制的表名 string table = "AAAAA"; //构造连接字符 ...

  6. linux下导入、导出mysql数据库命令的实现方法

    首先建空数据库 mysql>create database abc; 导入数据库 mysql>use abc; 设置数据库编码 mysql>set names utf8; 导入数据( ...

  7. 关于std::thread

    std::thread基本用法 1.普通函数: std::thread thread(func, param, ...) 2.类成员函数: std::thread thread(&class_ ...

  8. Linux 常用系统工作命令

    1.echo 用于输出字符串或者变量的值 2.date 显示及设置系统的时间和日期,格式为 “date [选项][+指定格式]”,输入以“+”号开头的参数,及可按照指定格式输出 date命令参数及作用 ...

  9. Tomcat(免安装版)的安装与配置【转】

    1.下载 到Apache的官方网站,我们可以很容易找到Tomcat的下载地址,如: http://tomcat.apache.org/download-60.cgi 在这里我们可以下载到Tomcat的 ...

  10. centos7 网卡识别为eth0 eth1

    使网卡识别为 eth0 方法一.安装系统是,net.ifnames=0 biosdevname=0 方法二.(没有测试): 修改网卡配置文件中的 DEVICE= 参数的关于 eth0 [root@an ...