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