当前位置:  开发笔记 > 编程语言 > 正文

为什么我的记录器多次记录相同的东西?

如何解决《为什么我的记录器多次记录相同的东西?》经验,为你挑选了1个好方法。

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

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多次记录同一事物?



1> Jamie K. Pha..:

将属性更改propagateFalse,如下所示

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.propagateTrue在构造函数中设置getLogger.

需要注意的是一个记录器的名称可以是一个"期间分隔层次值",让父子关系(如你在两个对象都做main.appmain.app.module,后者是儿童).

请参阅记录器对象部分 ;

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

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有