繁体   English   中英

Flask API 不在 Elastic Beanstalk 上写出日志

[英]Flask API Not Writing Out Logs on Elastic Beanstalk

我有一个 Flask API 并且我正在尝试实现日志记录。 在我的本地机器上一切正常,但在 AWS Elastic Beanstalk 上部署时似乎没有任何效果。

我有一个文件logger.py ,它创建和配置如下所示的记录器:

import logging
import os

if not os.path.isdir(os.environ.get('LOG_PATH', 'log')):
    os.mkdir(os.environ.get('LOG_PATH', 'log'))

# Configure logger
logger = logging.getLogger(__name__)
formatter = logging.Formatter('[%(asctime)s] %(levelname)s in %(module)s: %(message)s')

debug_file_handler = logging.FileHandler(f'{os.environ.get("LOG_PATH", "log")}/debug.log')
info_file_handler = logging.FileHandler(f'{os.environ.get("LOG_PATH", "log")}/info.log')
error_file_handler = logging.FileHandler(f'{os.environ.get("LOG_PATH", "log")}/error.log')

debug_file_handler.setLevel(logging.DEBUG)
info_file_handler.setLevel(logging.INFO)
error_file_handler.setLevel(logging.ERROR)

debug_file_handler.setFormatter(formatter)
info_file_handler.setFormatter(formatter)
error_file_handler.setFormatter(formatter)

logger.addHandler(debug_file_handler)
logger.addHandler(info_file_handler)
logger.addHandler(error_file_handler)

我将此文件导入我的应用程序工厂并将处理程序添加到我的应用程序中。

# Configure logger
app.logger.removeHandler(default_handler)
app.logger.addHandler(debug_file_handler)
app.logger.addHandler(info_file_handler)
app.logger.addHandler(error_file_handler)

然后在应用程序工厂中,我仍然有一个@app.before_request ,这样每个请求都应该进行日志记录(用于测试目的)。

@app.before_request
def before_request():
    elif request.method == 'GET':
        app.logger.debug(f'{request.method} {request.base_url}: parameters {dict(request.args)}')
    else:
        app.logger.debug(f'{request.method} {request.base_url}: parameters {request.json}')

这一切在我的本地机器上都可以正常工作,没有问题。 但是,当我尝试部署到 AWS EB 时,没有任何内容写入日志文件。 当我通过 cli 或 gui 将它们拉下来时,日志文件似乎已创建并显示,但没有任何内容被写入其中。 我遵循了一些教程并添加到我的.ebextensions文件中,但仍然没有运气。 目前我的.ebextensions包含一个logging.config ,如下所示:

files: 
  "/opt/elasticbeanstalk/tasks/bundlelogs.d/applogs.conf" :
    mode: "000777"
    owner: root
    group: root
    content: |
      /tmp/*.log
  "/opt/elasticbeanstalk/tasks/taillogs.d/applogs.conf" :
    mode: "000777"
    owner: root
    group: root
    content: |
      /tmp/*.log

当我请求日志(尾部和完整)时,日志文件似乎包含在内,但即使发出多个请求,日志也完全是空的。 我在这里也看到了一些答案,说我需要在此文件中包含chown wsgi:wsgi ,但这也没有用。 我也试过将日志写入var/app/current/log ,但这也不起作用。 始终创建日志文件,但不写入日志文件。

对于上下文,Elastic Beanstalk 平台是 Python 3.8,在 Amazon Linux 2 上运行。

任何帮助将不胜感激。

结果我需要做的就是将记录器的级别设置为logging.DEBUG这样我就可以看到调试日志了。

__init__.py中:

app.logger.setLevel(logging.DEBUG)

因为我的应用程序名称在配置时是src ,所以我可以在其他模块中获取这个记录器:

import logging
logger = logging.getLogger('src')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM