python日志重复的问题
原因:
handler 生成多次,每次new对象都是个新的,用单例或者判断都可以
代码:
# -*- coding: utf-8 -*-
"""
@author:yuan_x
@software:PyCharm
@file:log.py
@time:2020/12/17 5:15 下午
"""
import time
import os
from apps.project.tob.hzc.common.dele_file import initialize_log
try:
from loguru import logger as log_obj
except ImportError:
import logging as log_obj
class Log():
"""
兼容 loguru 可能会出现的版本问题
"""
def __new__(cls, *args, **kwargs):
'''
:param args:
:param kwargs:
:return:
'''
if not hasattr(cls, '_instance'):
initialize_log().initialize_api(path_flag='logs')
cls._instance = object.__new__(cls)
return cls._instance
def __init__(self, *args, **kwargs):
self.log_path = os.path.join(os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'logs')
self.log_name = os.path.join(self.log_path, '%s.log' % time.strftime('%Y_%m_%d'))
if hasattr(log_obj, "add"):
self.logger = Log1(log_obj, self.log_name)
else:
self.logger = Log2(log_obj, self.log_name)
def __getattr__(self, item):
return getattr(self.logger.logger, item)
class Log1():
def __new__(cls, *args, **kwargs):
if not hasattr(cls, '_instance'):
cls._instance = object.__new__(cls)
return cls._instance
def __init__(self, log_obj, log_name):
if not hasattr(self, "logger"):
self.logger = log_obj
self.logger.add(log_name, format="{time} {level} {message}", filter="", rotation="2 days",
level="INFO")
# 装饰器 用于追踪错误
self.catch = self.logger.catch
class Log2():
def __init__(self, log_obj, log_name):
# 文件名
# 日志收集器 日志句柄
self.log_name = log_name
self.logger = log_obj.getLogger()
if not self.logger.handlers:
self.logger.setLevel(log_obj.INFO)
self.formatter = log_obj.Formatter('%(asctime)s] - %(filename)s] - %(levelname)s: %(message)s')
# 文件
self.fh = log_obj.FileHandler(self.log_name, 'a', encoding='utf-8')
self.fh.setLevel(log_obj.INFO)
self.fh.setFormatter(self.formatter)
self.logger.addHandler(self.fh)
# 控制台
self.ch = log_obj.StreamHandler()
self.ch.setLevel(log_obj.INFO)
self.ch.setFormatter(self.formatter)
self.logger.addHandler(self.ch)
if __name__ == '__main__':
log = Log()
log.info('log start')
log.info('3333')
log.warning('log end')
log.debug('log end')

浙公网安备 33010602011771号