Jac*_*ome 6 python logging amazon-web-services aws-lambda
尽管阅读了文档,但我在使用 python 日志记录时还是无法在内部点击。
我有这个代码
import logging
logging.basicConfig(level=logging.INFO,format='%(levelname)s::%(message)s')
LOG = logging.getLogger("__name__")
LOG.info("hey")
Run Code Online (Sandbox Code Playgroud)
如果我从 bash 运行它,我会得到:
INFO::hey
Run Code Online (Sandbox Code Playgroud)
如果我在 aws lambda 中运行它,“嘿”根本不会出现在日志中。
然后我通过添加以下内容进行了设置记录器级别的测试:
LOG.setLevel(logging.INFO)
Run Code Online (Sandbox Code Playgroud)
从 bash 运行,我得到了之前得到的相同结果(所需的格式),但是从 lambda 运行,这显示在日志中:
[INFO] 2022-02-14T23:30:43.39Z eb94600a-af45-4124-99b6-d9651d6a3cf6 hey
Run Code Online (Sandbox Code Playgroud)
好吧……这很奇怪。其格式与 bash 中的格式不同。
我想我可以合理化第一个示例,因为 bash 上的输出实际上会发送到 stderr。然后我假设 aws lamdba 日志没有抓住这一点。但第二个示例也会在 bash 上发送到 stderr,但它显示在 lambda 日志中,但格式错误。很明显我错过了一些东西。
这里到底发生了什么?
当您的 Lambda 运行时,会运行一个工具来执行一些基本的引导程序,然后加载您的模块并调用它。AWS Lambda Python 运行时中的部分引导程序用自己的记录器替换了标准 Python 记录器:
logger_handler = LambdaLoggerHandler(log_sink)
logger_handler.setFormatter(
logging.Formatter(
"[%(levelname)s]\t%(asctime)s.%(msecs)dZ\t%(aws_request_id)s\t%(message)s\n",
"%Y-%m-%dT%H:%M:%S",
)
)
logger_handler.addFilter(LambdaLoggerFilter())
Run Code Online (Sandbox Code Playgroud)
此行为由 AWS在“日志记录库”部分下正式记录为Python 中的 AWS Lambda 函数日志 记录。
归档时间: |
|
查看次数: |
4727 次 |
最近记录: |