我不确定我在这里缺少什么,但是请在下面查看我的代码
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
答案 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()
配置的记录器。