标签: greengrass

在AWS lambda函数中两次获取日志

我正在尝试创建一个集中模块来设置我的日志格式化程序,以便在我的lambda函数中的多个python模块之间共享.此功能最终将在本地内部部署设备上的AWS Greengrass上运行.

出于某种原因,当我添加自己的处理程序来格式化消息时,日志将被输出两次 - 一次是在正确的日志级别,第二次是在错误的级别.

如果我使用标准的python记录器而不设置任何处理程序,它可以正常工作,例如

main.py:

import logging

logging.debug("test1")
Run Code Online (Sandbox Code Playgroud)

cloudwatch logs:

12:28:42 [DEBUG]-main.py:38,test1
Run Code Online (Sandbox Code Playgroud)

我的目标是在我的代码上有一个格式化程序,它将这些日志消息格式化为JSON.然后它们将被摄入集中式日志记录数据库.但是,当我这样做时,我得到两次日志消息.

loghelper.py:

def setup_logging(name):

    formatter = logging.Formatter("%(name)s, %(asctime)s, %(message)s")

    handler = logging.StreamHandler(sys.stdout)
    handler.setFormatter(formatter)

    logger = logging.getLogger(name)

    if logger.handlers:
        for handler in logger.handlers:
            logger.removeHandler(handler)

    logger.setLevel(logging.DEBUG)
    logger.addHandler(handler)
    return logger
Run Code Online (Sandbox Code Playgroud)

main.py:

import logging

logger = loghelper.setup_logging('main.test_function')

def test_function():
    logger.debug("test function log statement")

test_function()
Run Code Online (Sandbox Code Playgroud)

现在运行lambda函数时,我在云监视日志中收到两次调试消息,如下所示:

cloudwatch logs:

12:22:53 [DEBUG]-main.py:5, test function log statement
12:22:53 [INFO]-__init__.py:880,main.test_function,2018-06-18 12:22:53,099, test function log statement
Run Code Online (Sandbox Code Playgroud)

请注意:

  • 第一个条目处于正确的级别,但格式错误.
  • 第二个条目报告错误的级别,错误的模块但格式正确.

我无法解释这种行为,并会对可能导致这种行为的任何想法表示感谢.我也不知道第880行存在哪个构造函数.这可能会对正在发生的事情有所了解.

参考文献: …

python logging amazon-web-services aws-lambda greengrass

8
推荐指数
1
解决办法
1863
查看次数