У меня есть Python REST API, работающий в Docker контейнере, за uUWSGI, который управляется Supervisord. При локальном запуске приложения мои журналы отображаются в терминале так, как я хочу, но я не могу скопировать это в контейнере / рабочей среде на мой сервер системного журнала. Я прошел через множество SO-потоков, но ни одна комбинация флагов, по-видимому, не помогает моей регистрации.
Мой Python код записи в main.py:
formatter = logging.Formatter('%(asctime)s %(request_id)s %(module)s:%(levelname)s %(message)s')
handler = logging.StreamHandler() # have tried forcing this to stderr/stdout
handler.setFormatter(formatter)
handler.addFilter(AppFilter())
application.app.logger.handlers.clear()
application.app.logger.addHandler(handler)
application.app.logger.setLevel(logging.DEBUG)
application.app.logger.debug('application starting...')
Приведенный выше код отлично работает для вывода на локальный терминал. Вот что я попытался настроить для других программ / служб:
uwsgi.ini:
[uwsgi]
chdir = ./src
wsgi-file = main.py
pythonpath = ./src
master = true
processes = 4
threads = 2
uid = nginx
gid = nginx
socket = /tmp/uwsgi.sock
chown-socket = nginx:nginx
chmod-socket = 664
plugins = python3
supervisord.conf:
[supervisord]
nodaemon=true
user=root
[program:uwsgi]
command=/usr/sbin/uwsgi --ini /etc/uwsgi/uwsgi.ini --die-on-term --log-master
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
И, наконец, демон Docker настроен как /etc/docker/daemon.json
{
"log-driver": "syslog",
"log-opts": {
"syslog-address": "tcp://syslog_server_ip_address:514", # IP redacted for stackoverflow
"tag": "my_api"
}
}
Поскольку журналы проходят довольно много уровней, я не уверен, что делаю неправильно , Мой сервер системного журнала получает журнал для каждого запроса, который, я думаю, является необработанным журналом uWSGI, но я не могу получить ни один из моих кодов Python для работы в среде контейнера.
Работающий журнал выглядит так:
host1.net my_api[1753]: [pid: 12|app: 0|req: 2/2] ip.ip.ip.ip () {36 vars in 432 bytes} [Mon Jan 13 07:58:43 2020] GET /v1/test => generated 25256 bytes in 16 msecs (HTTP/1.0 200) 2 headers in 74 bytes (1 switches on core 1)
Любая помощь / указатели оценены, спасибо.