为什么对相同功能的调用如此之多?

时间:2019-05-16 17:33:43

标签: python

我不确定我在这里缺少什么,但是请在下面查看我的代码

def TestLogger(name):
    logger = logging.getLogger(name)
    logger.setLevel(LOG_LEVEL)
    handler = logging.FileHandler(LOG_FILE)
    handler.setFormatter(Formatter(LOG_FORMAT))
    handler.setLevel(LOG_LEVEL)
    logger.addHandler(handler)
    return logger

def printme( str ):
    logger = TestLogger(__name__)
    logger.debug( str)
    return

def main(args=None):
    logger = TestLogger(__name__)
    printme("1");
    printme("2");
    printme("3");

if __name__ == "__main__":
    main()

作为回报,我只接受了三行,但是我得到了很多…… 我在这里想念什么? 输出:

09:45:00,017 [DEBUG]:[__main__]:  1 in C:/demo/TryMe.py:61 2019-05-16
09:45:00,017 [DEBUG]:[__main__]:  1 in C:/demo/TryMe.py:61 2019-05-16 
09:45:00,018 [DEBUG]:[__main__]:  2 in C:/demo/TryMe.py:61 2019-05-16 
09:45:00,018 [DEBUG]:[__main__]:  2 in C:/demo/TryMe.py:61 2019-05-16
09:45:00,018 [DEBUG]:[__main__]:  2 in C:/demo/TryMe.py:61 2019-05-16 
09:45:00,019 [DEBUG]:[__main__]:  3 in C:/demo/TryMe.py:61 2019-05-16 
09:45:00,019 [DEBUG]:[__main__]:  3 in C:/demo/TryMe.py:61 2019-05-16 
09:45:00,019 [DEBUG]:[__main__]:  3 in C:/demo/TryMe.py:61 2019-05-16 
09:45:00,019 [DEBUG]:[__main__]:  3 in C:/demo/TryMe.py:61

1 个答案:

答案 0 :(得分:2)

每次调用TestLogger时,都会向记录器添加另一个处理程序。每个处理程序都会打印一条日志消息。

您在main()中称呼过一次。然后,当您致电printme("1")时,您会再次致电。因此它两次记录1

调用printme("2")时,您第三次调用它,因此它记录了2三次。

调用printme("3")时会再次调用它,因此它记录了3四次。

您应该只调用一次TestLogger(),然后将其作为参数传递给printme()

def printme( str, logger ):
    logger.debug( str)
    return

def main(args=None):
    logger = TestLogger(__name__)
    printme("1", logger);
    printme("2", logger);
    printme("3", logger);

这对于全局变量也是一种合理的用法,而不必将logger作为参数传递给可能需要记录日志的每个函数。

或者您可以将logger = logging.getLogger(__name__)置于main()以外的所有功能中。这将获得由TestLogger()配置的记录器。