为什么对同一个函数调用这么多?

2024-06-25 22:56:47 发布

您现在位置: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

Tags: nameinpydebuglogdemomainlogging
1条回答
网友
1楼 · 发布于 2024-06-25 22:56:47

每次调用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()配置的记录器。你知道吗

相关问题 更多 >