Python logging模块重复打印?
PHP中文网
PHP中文网 2017-04-18 09:40:36
[Python讨论组]

Python logging日志模块在使用时会进行重复打印,是否代码不对?还是?
贴上代码:

logme.py:

#!/usr/bin/env python
# _*_ coding: utf-8 _*_
__author__ = 'neilsun'
import logging
import time
import sys
import os
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from monitorstack import settings


logger = logging.getLogger('monitorstack')
time_obj = time.gmtime()
log_time = "{year}_{month}_{day}".format(year=time_obj.tm_year,month=time_obj.tm_mon,day=time_obj.tm_mday)

def debug(msg):
    logger.setLevel(logging.DEBUG)
    debuglogger = logging.StreamHandler()
    debuglogger.setLevel(logging.DEBUG)
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    debuglogger.setFormatter(formatter)
    logger.addHandler(debuglogger)
    if settings.DEBUG == True:
        logger.debug(msg)
    else:
        pass

def warning(msg):
    logger.setLevel(logging.WARNING)
    warnlogger = logging.FileHandler("logs/monitorstack_%s.log" % log_time)
    warnlogger.setLevel(logging.WARNING)
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    warnlogger.setFormatter(formatter)
    logger.addHandler(warnlogger)
    logger.warning(msg)

def error(msg):
    logger.setLevel(logging.ERROR)
    errorlogger = logging.FileHandler("logs/monitorstack_error_%s.log" % log_time)
    errorlogger.setLevel(logging.ERROR)
    formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    errorlogger.setFormatter(formatter)
    logger.addHandler(errorlogger)
    logger.error(msg)

test_log.py:

#!/usr/bin/env python
# _*_ coding: utf-8 _*_
__author__ = 'neilsun'
import logme,time

logme.debug('a')
logme.debug('b')
logme.debug('c')

结果:

2016-09-21 14:59:20,983 - DEBUG - a
2016-09-21 14:59:20,983 - DEBUG - b
2016-09-21 14:59:20,983 - DEBUG - b
2016-09-21 14:59:20,983 - DEBUG - c
2016-09-21 14:59:20,983 - DEBUG - c
2016-09-21 14:59:20,983 - DEBUG - c

求解

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
伊谢尔伦

logger的handler只需要Add一次。
你在Logme.py中每次调用debug都会设置添加一个log handler,每个handler都会打印一次log,所有就会出现调用几次debug,就会打印几条相同的log。

ringa_lee

你包装的logme模块的功能, logging模块都已经有了, 建议看看Logging HOWTO会让你事半功倍的.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号