监听器中没有处理程序,但 hasHandlers() 返回 True

问题描述 投票:0回答:1

我有与下面的代码片段类似的代码,并且无法弄清楚为什么它在作为独立脚本和侦听器调用时表现不同。 当它作为 python 脚本调用时,hasHandlers() 方法按预期返回 False,因为记录器没有处理程序。 另一方面,当它用作机器人脚本的侦听器时,hasHandlers() 方法返回 True 并且不会添加处理程序。处理程序打印还显示空列表。 添加条件“if not logger.hasHandlers()”,因为没有它,在执行多个测试时会多次打印相同的条目。

def end_test(name, attrs):
    set_logging()
    some_stuff_logging()

def set_logging():
    global logger
    logger = logging.getLogger(__name__)
    print(logger.handlers)
    print ("Has handlers: {}".format(logger.hasHandlers()))
    if not logger.hasHandlers():
        logger.setLevel(logging.INFO)
        formatter = logging.Formatter("%(asctime)s | %(module)s | %(levelname)s | %(message)s")
        stream_handler = logging.StreamHandler()
        stream_handler.setFormatter(formatter)
        logger.addHandler(stream_handler)

def some_stuff_logging():
    /* use logger to print stuff */

if __name__ == '__main__':
    set_logging()
    some_stuff_logging()

我无法弄清楚是什么原因导致 hasHandlers 方法中没有返回 False,尽管没有附加到记录器

python python-3.x robotframework
1个回答
0
投票

查看

hasHandler
方法的文档字符串表明它会搜索记录器的父级,直到找到处理程序或到达顶层。如果您希望
hasHandlers
仅反映记录器级别处理程序的存在,那么设置 logger.propagte = False 就足够了。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.