python 类静态方法实例化另一个类对象的问题?

python 类静态方法实例化另一个类对象的问题?

Logger是使用logging封装的一个日志类, 每次使用的时候都要实例化一下:

logger = Logger().getLogger()
logger.info(' message ')

不想每次实例化, 然后新加了一个类Logg 里面定义了对应各个日志级别的静态方法:
但是测试一下却输出了很多日志, 为什么呢?

import time

from weather.common.libs.logger import Logger

class Logg(object):

@staticmethod

def info(message):

print("info---------------")

log = Logger().getLogger()

log.info(message)

if __name__ == '__main__':

for i in range(3):

Logg.info('testing..')

time.sleep(1)

输出结果::::

info---------------

[2019-09-18 17:17:58,679][root][INFO]-logg.py-info:line:14 testing..

info---------------

[2019-09-18 17:17:59,679][root][INFO]-logg.py-info:line:14 testing..

[2019-09-18 17:17:59,679][root][INFO]-logg.py-info:line:14 testing..

info---------------

[2019-09-18 17:18:00,681][root][INFO]-logg.py-info:line:14 testing..

[2019-09-18 17:18:00,681][root][INFO]-logg.py-info:line:14 testing..

[2019-09-18 17:18:00,681][root][INFO]-logg.py-info:line:14 testing..

附加 Logger 类代码:

class Logger(object):

level_relations = {

'debug': logging.DEBUG,

'info': logging.INFO,

'warning': logging.WARNING,

'error': logging.ERROR,

'crit': logging.CRITICAL

} # 日志级别关系映射

def __init__(self, logger=None, level='info'):

# create logger

self.logger = logging.getLogger(logger)

self.logger.setLevel(self.level_relations.get(level))

# 创建一个handler,用于写入日志文件

self._log_time = time.strftime("%Y_%m_%d")

self._log_path = os.path.dirname(os.path.dirname(os.getcwd())) + os.sep + 'log' + os.sep + self._log_time

# check log file path

if not os.path.exists(self._log_path):

os.makedirs(self._log_path)

self._log_name = self._log_path + os.sep + 'log.log'

formatter = logging.Formatter('[%(asctime)s][%(name)s][%(levelname)s]-%(filename)s-%(funcName)s:line:%(lineno)d\t%(message)s')

fh = logging.FileHandler(self._log_name, 'a', encoding='utf-8')

# fh.setLevel(logging.INFO)

fh.setFormatter(formatter)

# 创建一个handler,用于输出到控制台

ch = logging.StreamHandler()

# ch.setLevel(logging.INFO)

ch.setFormatter(formatter)

# 给logger添加handler

self.logger.addHandler(fh)

self.logger.addHandler(ch)

# 关闭打开的文件

fh.close()

ch.close()

def getLogger(self):

return self.logger


回答:

你的getLogger方法是不是有添加handler的行为?重复get多次会添加多次

以上是 python 类静态方法实例化另一个类对象的问题? 的全部内容, 来源链接: utcz.com/p/937647.html

回到顶部