我有一个FastAPI服务,除了日志记录之外,它在各个方面都能正常工作,只有当它作为AWS函数运行时。
在本地运行日志时,将按预期在控制台上显示日志:
INFO: 127.0.0.1:62160 - "POST /api/v1/feature-requests/febbbc21-9650-44e6-8df5-80c8bb33b6ea/upvote HTTP/1.1" 200 OK
INFO: 127.0.0.1:62158 - "OPTIONS /api/v1/feature-requests HTTP/1.1" 200 OK
INFO: 127.0.0.1:62160 - "GET /api/v1/feature-requests HTTP/1.1" 200 OK
INFO: 127.0.0.1:62158 - "OPTIONS /api/v1/feature-requests-meta HTTP/1.1" 200 OK
INFO: 127.0.0.1:62160 - "GET /api/v1/feature-requests-meta HTTP/1.1" 200 OK
INFO: 127.0.0.1:62160 - "GET /api/v1/feature-requests/febbbc21-9650-44e6-8df5-80c8bb33b6ea HTTP/1.1" 200 OK
INFO: 127.0.0.1:62160 - "GET /api/v1/feature-requests-meta/febbbc21-9650-44e6-8df5-80c8bb33b6ea HTTP/1.1" 200 OK但是,当作为Lambda函数部署时,日志不存在:
2022-09-07T10:44:57.426+02:00 START RequestId: fd44ae47-5bfb-42e3-aeb4-d9f29857bb39 Version: $LATEST
2022-09-07T10:44:57.604+02:00 END RequestId: fd44ae47-5bfb-42e3-aeb4-d9f29857bb39
2022-09-07T10:44:57.604+02:00 REPORT RequestId: fd44ae47-5bfb-42e3-aeb4-d9f29857bb39 Duration: 177.85 ms Billed Duration: 178 ms Memory Size: 2048 MB Max Memory Used: 152 MB Init Duration: 1733.88 ms
2022-09-07T10:45:00.299+02:00 START RequestId: 08a7a6da-c2c6-446c-baa3-1d08c9816f5b Version: $LATEST
2022-09-07T10:45:00.318+02:00 END RequestId: 08a7a6da-c2c6-446c-baa3-1d08c9816f5b即使对于我们的代码生成的日志(相对于框架),在作为Lambda函数运行时也是不可见的。
配置:
在app.py中
LOG = logging.getLogger()
log_format = "%(asctime)s %(levelname)s %(message)s"
log_date_fmt = "%Y-%m-%d %H:%M:%S"
logging.basicConfig(
format=log_format,
level=logging.INFO,
datefmt=log_date_fmt,
)在所有其他Python文件中:
LOG = logging.getLogger(__name__)logging.conf
[loggers]
keys=root,api,config
[handlers]
keys=console_handler
[formatters]
keys=normal_formatter
[logger_root]
level=INFO
handlers=console_handler
[logger_api]
level=INFO
handlers=console_handler
qualname=api
propagate=0
[logger_config]
level=INFO
handlers=console_handler
qualname=config
propagate=0
[handler_console_handler]
class=StreamHandler
level=INFO
formatter=normal_formatter
args=(sys.stdout,)
[formatter_normal_formatter]
format=%(asctime)s %(levelname)s %(name)s %(message)s
datefmt=%Y-%m-%d %H:%M:%S我不确定在CloudWatch中获取日志还需要发生什么。
发布于 2022-09-08 06:51:00
如下所示,需要进行以下设置:
在上面的logging.conf顶部,必须导入uvicorn,这将在日志记录上创建一个额外的属性,而不是像这样使用fileConfig:
import uvicorn
logging.config.fileConfig("logging.conf", disable_existing_loggers=False)
LOG = logging.getLogger(__name__)发布于 2022-09-07 09:54:40
尝试cloudwatch库
在控制台中运行pip install cloudwatch
然后在您的代码中:
import logging
from cloudwatch import cloudwatch
logger = logging.getLogger('cloudwatch_logger')
formatter = logging.Formatter('%(asctime)s : %(levelname)s - %(message)s')
handler = cloudwatch.CloudwatchHandler(log_group = 'cloudwatch_log_group')
handler.setFormatter(formatter)
logger.setLevel(logging.DEBUG)
logger.addHandler(handler)然后使用此记录器登录到CloudWatch logger.warning('I am here'),或者通过日志记录配置将处理程序添加到根日志记录器中。
https://stackoverflow.com/questions/73633371
复制相似问题