首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么对同一函数的调用如此之多?

为什么对同一函数的调用如此之多?
EN

Stack Overflow用户
提问于 2019-05-17 01:33:43
回答 1查看 57关注 0票数 0

我不确定这里遗漏了什么,但请看下面的代码

代码语言:javascript
复制
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()

作为回报,我只期望三行,但我得到了这么多...这里我漏掉了什么?输出:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-17 01:43:43

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

您可以在main()中调用它一次。然后,当您调用printme("1")时,您会再次调用它。因此,它将1记录两次。

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

当您调用printme("3")时,您再次调用它,因此它将3记录四次。

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

代码语言:javascript
复制
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作为参数传递给可能需要进行日志记录的每个函数。

或者,您可以在除main()之外的所有函数中使用logger = logging.getLogger(__name__)。这将获取由TestLogger()配置的记录器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56173850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档