当前位置: 首页 > 知识库问答 >
问题:

将python日志记录与AWS Lambda一起使用

姬高扬
2023-03-14

正如AWS文件所示:

import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_logging_handler(event, context):
    logger.info('got event{}'.format(event))
    logger.error('something went wrong')

现在我做了:

import logging
logging.basicConfig(level = logging.INFO)
logging.info("Hello World!")

第一段代码打印在Cloud Watch控制台中,但第二段没有。

我没有看到任何区别,因为这两个代码段使用的是根记录器。

共有3个答案

梁祯
2023-03-14

我一直在努力解决这个确切的问题。在本地和AWS CloudWatch上都有效的解决方案是像这样设置您的日志记录:

import logging

# Initialize you log configuration using the base class
logging.basicConfig(level = logging.INFO)

# Retrieve the logger instance
logger = logging.getLogger()

# Log your output to the retrieved logger instance
logger.info("Python for the win!")

厉钊
2023-03-14

直接从问题@StevenBohrer的答案链接中的顶部答案复制到(这对我很有用,用我自己的配置替换了最后一行):

root = logging.getLogger()
if root.handlers:
    for handler in root.handlers:
        root.removeHandler(handler)
logging.basicConfig(format='%(asctime)s %(message)s',level=logging.DEBUG)
羊慈
2023-03-14

日志记录似乎不起作用的原因是AWS Lambda Python运行时预配置了一个日志处理程序,根据所选运行时的版本,该处理程序可能会修改记录的消息格式,如果可用,还可能会向记录中添加一些元数据。但没有预配置的是日志级别。这意味着无论您尝试发送的日志消息类型如何,它都不会实际打印。

由于AWS文档本身,要在AWS Lambda上下文中正确使用日志记录库,只需设置根日志记录器的日志级别:

import logging
logging.getLogger().setLevel(logging.INFO)

如果希望Python脚本既可以在AWS Lambda上执行,也可以使用本地Python解释器执行,则可以检查处理程序是否已配置,否则返回到basicConfig(创建默认stderr处理程序):

if len(logging.getLogger().handlers) > 0:
    # The Lambda environment pre-configures a handler logging to stderr. If a handler is already configured,
    # `.basicConfig` does not execute. Thus we set the level directly.
    logging.getLogger().setLevel(logging.INFO)
else:
    logging.basicConfig(level=logging.INFO)
 类似资料:
  • 我正在使用python日志记录我的程序。所有日志当前都打印在stdout上,但我希望使用POST REST调用将它们发送到远程日志服务器。当前,我的程序发出了多个日志记录的POST请求。有没有更优化的方式发送日志,我可以捆绑多个日志在一个POST请求?

  • 问题内容: 我正在编写一个服务器应用程序,该应用程序应该能够在控制台和日志文件上以不同级别登录。 问题是,如果设置了logging.basicConfig(),它将登录到控制台,但是必须在主线程中进行设置。 也可以使用logging.basicConfig(filename =’logger.log’)进行设置以写入文件。 设置用于控制台日志记录(logging.StreamHandler())或

  • 问题内容: 我尝试将所有日志存储在哨兵实例中。相应于此线程,我尝试了以下操作: 将哨兵附加程序添加到loggin.yml: 和复制,并以ES / lib文件夹。启动过程中没有错误,但哨兵没有记录,即使在控制台上也有警告消息。ES的版本是2.1.0。 我想念什么吗? 问题答案: 这是有效的解决方案(适用于ES 2.4.4): 添加下面的库文件夹ES的:,,, 更新: 重新启动ES实例

  • 问题内容: 我想使用PySide创建一个简单的应用程序,仅用于从python日志记录中输出。 我想知道: 如何重定向stdout写入QTextEdit? 如何编写logging.Handler记录到QTextEdit? 谢谢 问题答案: 这是从PyQt邮件列表复制粘贴的,但应该适用于PySide 这应该做您想要的。 用法示例:

  • 问题内容: 我正在使用Python日志记录,由于某种原因,我的所有消息都出现两次。 我有一个配置日志记录的模块: 稍后,我调用此方法来配置日志记录: 然后,在buy_ham模块中,我将调用: 由于某种原因,所有消息都出现两次。我注释掉其中一个流处理程序,还是一样。有点奇怪,不确定为什么会这样…大声笑。假设我错过了一些显而易见的事情。 干杯,维克多 问题答案: 您正在调用两次(也许使用的方法):将返

  • 我想在我的应用程序中使用SLF4J+logback用于两个目的--日志和审计。 14:41:57.978[main]信息AUDIT_LOGGER-110欢迎使用main 如何确保审核消息在审核记录器下只出现一次?