引发的记录器在引发异常后生成重复的输出

时间:2018-03-06 16:07:52

标签: python logging

问题解决了!

通过消除烧瓶记录器,重复的输出似乎消失了。

app.logger.disabled = True

好像已经成功了。

老实说,我真的不明白伐木工似乎是如何工作的,但我遇到了一个奇怪的问题。

我通过以下代码启动记录器:

utilities_module:

def get_logger(name):
    logger = logging.getLogger(name)
    if not logger.handlers:
        handler = logging.StreamHandler()
        formatter = logging.Formatter(
            "%(asctime)s %(levelname)s %(name)s %(message)s",
            "%Y-%m-%d %H:%M:%S"
        )
        handler.setFormatter(formatter)
        logger.addHandler(handler)
        logger.setLevel(logging.INFO)
    return logger

主要模块:

import utilities
logger = utilities.get_logger("Any_Name:")

logger.info("My heart will go on!")

输出“YYYY-MM-DD时间Any_Name:我的心会继续!”应该如此。

问题是:

直到引发异常,然后输出变得重复,但没有日期和时间。

像这样:

2018-03-06 15:33:23 INFO Any_Name:  My heart will go on! 
INFO:Any_Name:: My heart will go on!

注意额外的2个:

记录器是在类的实例化时创建的,并在类中用作self.logger,并且只实例化一次。

很高兴知道:

这是一个微服务,但重复的日志都在k8中,当在本地运行时,它使用Flask restfull。那些是使用的点子模块

 - flask == 0.12 
 - flask-restful == 0.3.6  
 - PyYaml == 3.12  
 - Requests == 2.18.3 
 - requests-toolbelt == 0.8.0

2 个答案:

答案 0 :(得分:0)

如果你有一个烧瓶应用程序,你可以看到删除默认的应用程序记录器是否修复了这个问题:

from flask.logging import default_handler
app.logger.removeHandler(default_handler)

如果确实如此,您的烧瓶应用程序正在配置自己的日志记录。通过删除上面的默认处理程序或通过使用app.logger注册处理程序来解决此问题,以便烧瓶看到您正在处理自己的日志记录。

您还可以在应用程序配置中设置LOGGER_HANDLER_POLICY值。

答案 1 :(得分:0)

问题解决了!

通过消除烧瓶记录器,重复的输出似乎消失了。

app.logger.disabled = True

好像已经成功了。