python在aws-lambda中的日志记录



尽管阅读了文档,但在Python日志记录方面,有些东西在我内部并没有点击。

我有这个代码

import logging
logging.basicConfig(level=logging.INFO,format='%(levelname)s::%(message)s')
LOG = logging.getLogger("__name__")
LOG.info("hey")

如果我从bash运行它,我会得到这个:

INFO::hey

如果我在aws lambda中运行它;嘿"根本没有显示在日志中。

然后我做了一个测试,通过添加以下内容在记录器上设置级别:

LOG.setLevel(logging.INFO)

从bash运行我得到了与以前相同的东西(所需的格式(,但从lambda运行,这显示在日志中:

[INFO] 2022-02-14T23:30:43.39Z eb94600a-af45-4124-99b6-d9651d6a3cf6 hey

好吧。。。这很奇怪。格式与bash中的不同。

我想我可以合理化第一个例子,因为bash的输出实际上是到stderr的。然后我假设aws的lamdba日志没有抓住它。但第二个示例也将在bash上执行stderr,但它显示在lambda日志中,但格式错误。很明显我错过了什么。

引擎盖下面发生了什么事?

当你的Lambda运行时,一个线束正在运行,它会进行一些基本的引导,然后加载你的模块并调用它。AWS Lambda Python Runtime中的部分引导用它自己的取代了标准的Python记录器

logger_handler = LambdaLoggerHandler(log_sink)
logger_handler.setFormatter(
logging.Formatter(
"[%(levelname)s]t%(asctime)s.%(msecs)dZt%(aws_request_id)st%(message)sn",
"%Y-%m-%dT%H:%M:%S",
)
)
logger_handler.addFilter(LambdaLoggerFilter())

AWS将此行为正式记录为Python中的AWS Lambda函数日志,在";日志库";。

最新更新