Fargate如何将uWSGI和Django日志从容器发送到Cloudwatch

时间:2020-09-06 07:55:12

标签: django docker uwsgi amazon-cloudwatch aws-fargate

我让Django在AWS Fargate的docker容器中的uWSGI后面运行。容器日志将发送到Cloudwatch。在我的设置中,如果uWSGI和Django都登录到stdout / stderr并且日志混杂在一起,我会没事的。在下面粘贴我的配置。

这是我的入口点。

#!/bin/bash

python manage.py collectstatic --noinput
python /code/manage.py migrate --noinput
exec uwsgi --show-config --log-master

我可以看到来自Django的collectstaticmigrate调用的正确日志输出。 DEBUG 2020-09-06 07:39:38,589 retryhandler 6 139721333720896 No retry needed.

这些很容易识别,因为它们以日志级别DEBUG开始。

uWSGI进程一开始,我就停止看到来自Django的任何日志事件。我唯一看到的是uWSGI日志事件,例如: [pid: 13|app: 0|req: 2/1] 10.0.2.249 () {30 vars in 352 bytes} [Sun Sep 6 07:39:46 2020] GET / => generated 3877 bytes in 444 msecs (HTTP/1.1 200) 4 headers in 128 bytes (1 switches on core 1)

Dockerfile中,我设置了3个其他与uWSGI相关的环境变量:

ENV UWSGI_WSGI_FILE=sanctionsio/wsgi.py
ENV UWSGI_HTTP=:8000 UWSGI_MASTER=1 UWSGI_HTTP_AUTO_CHUNKED=1 UWSGI_HTTP_KEEPALIVE=1 UWSGI_LAZY_APPS=1 UWSGI_WSGI_ENV_BEHAVIOR=holy
ENV UWSGI_WORKERS=2 UWSGI_THREADS=4

Django日志记录的设置如下:

LOGGING_LEVEL = 'DEBUG'
LOGGING = {
    'version': 1,
    'disable_existing_loggers': True,
    'formatters': {
        'verbose': {
            'format': '%(levelname)s %(asctime)s %(module)s %(process)d %(thread)d %(message)s'
        },
        'simple': {
            'format': '%(levelname)s %(module)s %(message)s'
        },
    },
    'handlers': {
        'console': {
            'level': LOGGING_LEVEL,
            'class': 'logging.StreamHandler',
            'formatter': 'verbose'
        },
    },
    'loggers': {
        '': {
            'level': LOGGING_LEVEL,
            'handlers': ['console', ]
        },
        'zeep': {
            'level': 'INFO',
            'handlers': ['console']
        },
    },
}

我是否在uWSGI或Django方面都缺少任何东西,所以应用程序日志(Django)最终以stdout / stderr与wSGI日志混合在一起?

0 个答案:

没有答案