python日志重复打印

Python日志重复打印问题

用Python的logging模块记录日志时,出现了重复输出日志的问题。这里我是把logger封装了一层:

def init_logger(log_name, file_log_level=logging.DEBUG, stream_log_level=logging.INFO,
                max_bytes=200 * 1024 * 1024, backup_count=10):
    log_dir_path = os.path.join(CONST.PROJECT_DIR, 'logs')
    if not os.path.isdir(log_dir_path):
        os.makedirs(log_dir_path)
    log_file_path = os.path.join(log_dir_path, '{}.log'.format(log_name))
    logger = logging.getLogger(log_name)

    fmt = '[%(name)s]' + '-[%(filename)s:%(lineno)s]' +  \
          '-[%(asctime)s]' + '-[%(levelname)s]' + '-[%(process)d]'  + '-[%(thread)d]' + '\t%(message)s'

    formatter = logging.Formatter(fmt)

    file_handler = handlers.RotatingFileHandler(log_file_path, maxBytes=max_bytes,
                                                backupCount=backup_count, encoding='utf-8')
    file_handler.setLevel(file_log_level)
    file_handler.setFormatter(formatter)
    logger.addHandler(file_handler)

    stream_handler = logging.StreamHandler()
    stream_handler.setLevel(stream_log_level)
    stream_handler.setFormatter(formatter)
    # logger.addHandler(stream_handler)

    log_queue = Queue()
    queue_handler = handlers.QueueHandler(log_queue)
    # queue_handler.setLevel(stream_log_level)
    # queue_handler.setFormatter(formatter)
    queue_listener = handlers.QueueListener(log_queue, stream_handler)
    logger.addHandler(queue_handler)
    queue_listener.start()

    logger.setLevel(file_log_level)
    logger.propagate = False
    return logger


logger = init_logger(PROJECT_NAME)

其他地方要用到logger直接导入。

logging日志输出重复一般都是因为多次addHandler的问题,代码里调用addHandler的地方只有init_logger,那么肯定是init_logger函数重复调用了,在init_logger后面输出调用栈:

logger = init_logger(PROJECT_NAME)
traceback.print_stack()

从调用栈中看到有两处import了logger这个模块,回溯到上一层调用发现有一处:

from src.common.logger import logger

另一处:

from common.logger import logger

统一成from common.logger import logger,问题解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值