python有的时候会输出多余日志,原因可能为:
- 不是按照规范使用logging.getLogger(logger_name),直接使用了Logging打印日志
- Logger包里面的NullHandler被继承实现
原因
创建记录器时,级别默认设置为 NOTSET (当记录器是根记录器时,将处理所有消息;如果记录器不是根记录器,则将委托给父级)。请注意,根记录器的默认级别为 WARNING 。
委派给父级的意思是如果一个记录器的级别设置为 NOTSET,将遍历其祖先记录器,直到找到级别不是 NOTSET 的记录器,或者到根记录器为止。
如果发现某个父级的级别不是 NOTSET ,那么该父级的级别将被视为发起搜索的记录器的有效级别,并用于确定如何处理日志事件。
如果搜索到达根记录器,并且其级别为 NOTSET,则将处理所有消息。否则,将使用根记录器的级别作为有效级别。
如果指定的加载器之前有同名的加载器,那么会使用根加载器作为有效级别。而Logging默认是 NOTSET,导致NullHandler被实现
比如:指定了一个加载器‘test01’,然后在子类也指定了一个加载器‘test01’,那么会导致
- 两个加载器输出的日志合并
- 使用了父类的加载器配置
python使用了for循环递归创造hander
hander的位置一般应该在函数的_init_,而且每个函数通常按照需要指定而不是在循环定义。
如果在for循环里面定义hander,会导致hander重复打印文档