Python 为什么我的记录器会多次记录相同的事情?

Python 为什么我的记录器会多次记录相同的事情?,python,Python,我希望创建两个不同的记录器,这就是我所拥有的: import logging def logger(logger_name, level): """Create logger with given name and level""" # Set up logger logger = logging.getLogger(logger_name) logger.setLevel(logging.DEBUG) # print(logger.handler

我希望创建两个不同的记录器,这就是我所拥有的:

import logging


def logger(logger_name, level):
    """Create logger with given name and level"""

    # Set up logger
    logger = logging.getLogger(logger_name)
    logger.setLevel(logging.DEBUG)

    # print(logger.handlers)
    formatter = logging.Formatter('%(levelname)-8s %(asctime)s %(message)s')
    handler = logging.StreamHandler()
    handler.setFormatter(formatter)

    # Set level
    handler.setLevel(level)

    # Add handlers to logger
    logger.addHandler(handler)

    return logger


LOGGER1 = logger(logger_name='main_app', level=logging.INFO)
LOGGER2 = logger(logger_name='main_app.module', level=logging.DEBUG)

LOGGER1.info('one')
LOGGER2.info('two')
LOGGER1.info('three')
这是正在记录的内容:

INFO     2017-01-25 11:49:45,209 one
INFO     2017-01-25 11:49:45,209 two
INFO     2017-01-25 11:49:45,209 two
INFO     2017-01-25 11:49:45,210 three
我做错了什么?

如何防止
LOGGER2
多次记录同一事件?

将属性
propagate
更改为
False
,如下所示

def logger(logger_name, level):
    """Create logger with given name and level"""

    # Set up logger
    logger = logging.getLogger(logger_name)

    #stops logging messages being passed to ancestor loggers
    logger.propagate = False

    #....

如果[Logger.propagate]的计算结果为true,则记录到此记录器的事件将传递给更高级别(祖先)记录器的处理程序,以及连接到此记录器的任何处理程序。消息直接传递给祖先日志记录者的处理程序-不考虑所讨论的祖先日志记录者的级别或过滤器

logger.propagate
的默认值是由构造函数在
getLogger
中设置的
True

请注意,记录器的名称可以是“以时段分隔的分层值”,给出父子关系(正如您在两个对象
main.app
main.app.module
中所做的那样,后者是子对象)

该名称可能是一个以句点分隔的层次结构值,如foo.bar.baz(例如,它也可能只是普通的foo)。层次结构列表中较低的记录器是列表中较高记录器的子级