烧瓶API未在弹性豆stal上写入日志

发布于 2025-01-26 03:05:06 字数 2493 浏览 1 评论 0原文

我有一个烧瓶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包括loggging.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,但这也不起作用。日志文件始终是创建但未写入的。

对于上下文,弹性豆刺平台是在Amazon Linux 2上运行的Python 3.8。

任何帮助将不胜感激。

I have a Flask API and I am attempting to implement logging. Everything is working fine in my local machine, but nothing seems to work when deployed on AWS Elastic Beanstalk.

I have a file logger.py that creates and configures the logger that looks like this:

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)

I import this file int my app factory and add the handlers to my app.

# 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)

Then in the app factory still, I have a @app.before_request so that logging should occur on every request (for testing purposes).

@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}')

This all works fine on my local machine without a problem. However when I try to deploy to AWS EB, nothing is written to the log files. The log files appear to be created and present when I pull them down via the cli or gui, but nothing is being written to it. I've followed a few tutorials and have added to my .ebextensions file but am still having no luck. Currently my .ebextensions includes a logging.config that looks like this:

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

The log files appear to be included when I request the logs (both tail and full), but the logs are completely empty even after making multiple request. I've also seen a few answers on here saying I need to include chown wsgi:wsgi in this file, but that has not worked either. I've also tried writing the logs to var/app/current/log and that doesn't work either. The log files are always created, but not written to.

For context, the Elastic Beanstalk platform is Python 3.8 running on Amazon Linux 2.

Any help would be greatly appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

把昨日还给我 2025-02-02 03:05:06

事实证明,我需要做的就是将记录器的级别设置为loggging.debug,以便我可以看到调试日志。

__ init __. py中:

app.logger.setLevel(logging.DEBUG)

由于我的应用程序名称是src当我配置它时,我可以在其他模块中捕获此记录器:

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

Turns out all I needed to do was set the level of the logger to logging.DEBUG so I could see debug logs.

in __init__.py:

app.logger.setLevel(logging.DEBUG)

And since my app name is src when I configure it, I can grab this logger in other modules with:

import logging
logger = logging.getLogger('src')
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文