为了方便管理,我这边在一个文件夹写了多个log实例,想那个脚本需要用就调用哪个,结果所有实例都只往一个实例里写。有没有知道这玩意怎么回事
Log.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
import logging.handlers
MAX_SIZE = 1024 * 1024 * 5 # 单个log文件最大大小
MAX_NUMB = 10 # 可以存在的最大数量,超过后会覆盖之前的log文件
Level = { 0:logging.DEBUG, 1:logging.INFO, 2:logging.WARNING, 3:logging.ERROR, 4:logging.CRITICAL }
class Log:
__file = None
__handler = False
__fmt = '%(asctime)s [%(filename)s](%(levelname)s) - %(message)s'
def __init__(self, logname="log.log"):
self.__file = logname
logging.basicConfig(filename=self.__file, filemode='a+', format=self.__fmt)
self.__handler = logging.handlers.RotatingFileHandler(self.__file, maxBytes=MAX_SIZE, backupCount=MAX_NUMB)
# 打印到控制台显示
self.__handler = logging.StreamHandler()
self.__handler.setLevel(logging.INFO)
#设置格式
formatter = logging.Formatter(self.__fmt)
self.__handler.setFormatter(formatter)
#获取实例
def getInstance(self, strname="log", setlevel=0):
logger = logging.getLogger(strname)
logger.addHandler(self.__handler)
logger.setLevel(Level[setlevel])
return logger
代码管理文件
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from Log import Log
Test_1_Log = Log(logname="../Log/test_1.log").getInstance("test_1", setlevel=2)
Test_2_Log = Log(logname="../Log/test_2.log").getInstance("test_2", setlevel=2)
Test_3_Log = Log(logname="../Log/test_3.log").getInstance("test_3", setlevel=1)
预想是test_1.py进行importTest_1_Log后吸入test_1.log,test_2.py载入写入文件test_2.log。但是结果是所有文件写入test_1,如果Test_1_Log跟Test_2_Log对调就会全部写入test_2.log ...
往上查了半天也没找到结果,不应该getLogger名称不同吸入不同文件吗?为啥会这样
你就实例化一个log就行了,然后按照需要设置实例化对象属性