You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Lambda中Python日志文件LOG创建后为空的问题求助

问题原因

AWS Lambda运行环境会预先配置root logger的handler(用于将日志输出到CloudWatch),而Python的logging.basicConfig函数仅在root logger没有任何已注册handler时才会执行配置逻辑。这就导致你代码里的basicConfig在Lambda中完全没生效——FileHandler根本没被添加到root logger上,所以LOG文件虽然被创建,但没有任何日志写入,最终为空。

而你的slow_logger是自定义的独立logger,手动添加了FileHandler且禁用了传播,不受Lambda预配置的root logger影响,所以能正常生成日志。

解决方案

推荐两种处理方式,根据你的需求选择:

方式一:手动配置root logger

绕过basicConfig,直接获取root logger并手动添加所需的handler,确保配置生效:

import logging
import uuid

LOG = f"/tmp/{uuid.uuid1()}_log.log"
SLOW_LOG = f"/tmp/{uuid.uuid1()}_slow.log"

# 获取root logger并设置级别
root_logger = logging.getLogger()
root_logger.setLevel(logging.INFO)

# 配置FileHandler
file_handler = logging.FileHandler(LOG)
formatter = logging.Formatter("%(levelname)s - %(message)s")
file_handler.setFormatter(formatter)
root_logger.addHandler(file_handler)

# 保留StreamHandler(可选,用于输出到CloudWatch)
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
root_logger.addHandler(stream_handler)

# 慢请求logger配置保持不变
slow_logger = logging.getLogger("slow_requests")
slow_logger.setLevel(logging.INFO)
slow_logger.propagate = False

slow_file_handler = logging.FileHandler(SLOW_LOG)
slow_file_handler.setFormatter(formatter)
slow_logger.addHandler(slow_file_handler)

如果不想让root logger同时输出到CloudWatch,可以先移除Lambda默认的handler:

# 在添加新handler前移除默认handler
for handler in root_logger.handlers[:]:
    root_logger.removeHandler(handler)

方式二:使用自定义logger处理普通日志

和慢请求logger一样,创建独立的自定义logger来处理普通日志,完全避开Lambda预配置的root logger:

import logging
import uuid

LOG = f"/tmp/{uuid.uuid1()}_log.log"
SLOW_LOG = f"/tmp/{uuid.uuid1()}_slow.log"

# 普通日志的自定义logger
normal_logger = logging.getLogger("normal_requests")
normal_logger.setLevel(logging.INFO)
normal_logger.propagate = False  # 禁止日志传播到root logger

# 添加FileHandler
file_handler = logging.FileHandler(LOG)
formatter = logging.Formatter("%(levelname)s - %(message)s")
file_handler.setFormatter(formatter)
normal_logger.addHandler(file_handler)

# 添加StreamHandler输出到CloudWatch(可选)
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(formatter)
normal_logger.addHandler(stream_handler)

# 慢请求logger配置保持不变
slow_logger = logging.getLogger("slow_requests")
slow_logger.setLevel(logging.INFO)
slow_logger.propagate = False

slow_file_handler = logging.FileHandler(SLOW_LOG)
slow_file_handler.setFormatter(formatter)
slow_logger.addHandler(slow_file_handler)

之后使用normal_logger.info("xxx")来记录普通日志即可。

内容的提问来源于stack exchange,提问作者PloniStacker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 12:23:18